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()
,但它不起作用
答案 0 :(得分:7)
您可以通过克隆节点,删除脚本标记并检索text()
值来实现这一目标:
var content = $('#parent').clone();
content.find('script').remove();
console.log(content.text());
您应克隆节点,以便之后确定未更改的DOM树。
答案 1 :(得分:4)
答案 2 :(得分:4)
这对我有用,看起来非常通用[编辑以使程序更清晰]
var t = [];
$("#parent").each(function(i,e)
{if (e.nodeName!="SCRIPT") t.push(e.innerText);});
console.log(t);
而不是console.log()
你应该以其他方式收集字符串(数组?)以在代码中使用它们。
答案 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>