Ответ 1
попробуйте это
($('#parent').text()).replace($('#parent script').text(),'')
проверьте http://jsfiddle.net/QLBvK/12/
Структура 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>
Я пытаюсь получить содержимое каждого node, за исключением содержимого <script>
. Результат должен выглядеть следующим образом:
parent may contain text
child 1 may contain text
child2 may contian text
Я пробовал использовать ($('#parent').not('div script').text()
, но он не работает
попробуйте это
($('#parent').text()).replace($('#parent script').text(),'')
проверьте http://jsfiddle.net/QLBvK/12/
Это можно сделать, клонировав node, удалив теги script и получив значение text()
:
var content = $('#parent').clone();
content.find('script').remove();
console.log(content.text());
Вы должны клонировать node, чтобы впоследствии сохранить без изменений дерево DOM.
Это работает для меня и кажется очень общим [EDITED, чтобы сделать процедуру более понятной)
var t = [];
$("#parent").each(function(i,e)
{if (e.nodeName!="SCRIPT") t.push(e.innerText);});
console.log(t);
Вместо console.log()
вы должны, очевидно, собирать строки каким-либо другим способом (array?), чтобы использовать их в своем коде.
Хороший небольшой плагин 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>
Фрагмент из этого ответа: fooobar.com/info/155298/...