Подтвердить что ты не робот

Jquery исключает некоторые дочерние узлы из .text()

Структура 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(), но он не работает

4b9b3361

Ответ 1

попробуйте это

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

проверьте http://jsfiddle.net/QLBvK/12/

Ответ 2

Это можно сделать, клонировав node, удалив теги script и получив значение text():

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

DEMO

Вы должны клонировать node, чтобы впоследствии сохранить без изменений дерево DOM.

Ответ 3

Это работает для меня и кажется очень общим [EDITED, чтобы сделать процедуру более понятной)

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

Вместо console.log() вы должны, очевидно, собирать строки каким-либо другим способом (array?), чтобы использовать их в своем коде.

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

Ответ 4

Хороший небольшой плагин 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/...