13

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

4 に答える 4

7

これは、ノードのクローンを作成し、スクリプトタグを削除して、text()値を取得することで実現できます。

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

デモ

後で変更されていないDOMツリーを保証するために、ノードのクローンを作成する必要があります。

于 2012-06-30T01:22:13.263 に答える
6

これを試して:

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

このフィドルをチェックしてください。

于 2012-06-30T00:57:45.440 に答える
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/

于 2012-06-30T01:09:19.953 に答える
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>

この回答からの抜粋:https ://stackoverflow.com/a/11348383/383904

于 2014-12-23T17:13:54.157 に答える