如何使用jQuery从父元素中删除文本(不删除内部元素)?

yhived7q  于 2024-01-07  发布在  jQuery
关注(0)|答案(4)|浏览(160)

假设我有如下内容(由http://viralpatel.net/blogs/jquery-get-text-element-without-child-element/修改而来)

  1. <div id="foo">
  2. first
  3. <div id="bar1">
  4. jumps over a lazy dog!
  5. </div>
  6. second
  7. <div id="bar2">
  8. another jumps over a lazy dog!
  9. </div>
  10. third
  11. </div>

字符串
如何从DOM中删除(仅文本)“first”、“second”和“third”而不影响任何子元素?

wbgh16ku

wbgh16ku1#

如果你想删除所有的子文本节点,你可以使用.contents(),然后.filter()来减少匹配集,只剩下文本节点:

  1. $("#foo").contents().filter(function () {
  2. return this.nodeType === 3;
  3. }).remove();​​​​​​​

字符串
这是working example

备注:这将保留子元素上的任何现有事件处理程序,而使用.html()将不会这样做(因为元素将从DOM中删除并重新添加)。
注2:一些链接问题中的答案显示了与我这里的答案类似的代码,但它们使用了nodeType常量(例如return this.nodeType === Node.TEXT_NODE)。这是一个不好的做法,因为版本9以下的IE没有实现Node属性。使用整数更安全(可以在DOM级别2规范中找到)。

fcwjkofz

fcwjkofz2#

这里有一个非jQuery版本,它可以在所有主流浏览器中运行,直到IE 5,只是为了证明没有jQuery的生活是多么的不可怕。
演示:http://jsfiddle.net/timdown/aHW9J/
代码:

  1. var el = document.getElementById("foo"), child = el.firstChild, nextChild;
  2. while (child) {
  3. nextChild = child.nextSibling;
  4. if (child.nodeType == 3) {
  5. el.removeChild(child);
  6. }
  7. child = nextChild;
  8. }

字符串

eblbsuwk

eblbsuwk3#

试试这个:

  1. $("#foo").html($("#foo").find("div"));​

字符串
演示:http://jsfiddle.net/PXxC4/

rsl1atfo

rsl1atfo4#

你可以用这个

  1. $("#foo").html($("#foo").children());​

字符串

相关问题