jquery从.text()中排除一些子节点

时间:2012-06-30 00:50:21

标签: jquery

html结构如下所示

<div id="parent">
    parent may contain text
    <div id="child1">
       child 1 may contain text
       <script>console.log('i always contain something');</script>`
    </div>

    <div id="child2">
       child2 may contian text
    </div>    
</div> 

我正在尝试获取除<script>内容之外的每个节点的内容。结果应如下所示:

    parent may contain text
    child 1 may contain text 
    child2 may contian text

我已尝试使用($('#parent').not('div script').text(),但它不起作用

4 个答案:

答案 0 :(得分:7)

您可以通过克隆节点,删除脚本标记并检索text()值来实现这一目标:

var content = $('#parent').clone();
content.find('script').remove();
console.log(content.text());

DEMO

您应克隆节点,以便之后确定未更改的DOM树。

答案 1 :(得分:4)

试试这个:

($('#parent').text()).replace($('#parent script').text(),'');

查看此Fiddle

答案 2 :(得分:4)

这对我有用,看起来非常通用[编辑以使程序更清晰]

var t = [];
$("#parent").each(function(i,e) 
    {if (e.nodeName!="SCRIPT") t.push(e.innerText);}​);​​​​​​​​​​​​​​
console.log(t);

而不是console.log()你应该以其他方式收集字符串(数组?)以在代码中使用它们。

http://jsfiddle.net/8eu4W/3/

答案 3 :(得分:3)

一个不错的小jQuery插件:jQuery.ignore()

$.fn.ignore = function(sel){
  return this.clone().find(sel||">*").remove().end();
};

使用类似:

$("#parent").ignore()                  // Will ignore all children elements
$("#parent").ignore("script")          // Will ignore a specific element
$("#parent").ignore("h1, p, .ignore")  // Will ignore specific elements

示例:

<div id="parent">
   Get this
   <span>Ignore this</span>
   <p>Get this paragraph</p>
   <div class="footer">Ignore this</div>
</div>

var ignoreSpanAndFooter = $("#parent").ignore("span, .footer").html();

将导致:

Get this
<p>Get this paragraph</p>

此答案的摘录:https://stackoverflow.com/a/11348383/383904