6

タグ内のテキスト値を取得しようとしていますが、不要なli別のタグがあります

例:

<ul>
<li><a class="close">x</a>text</li>
<li><a class="close">x</a>more text</li>
<li><a class="close">x</a>wohoooo more text</li>
</ul>

私はそのようなタグを得ることができます

$("ul li").text();

ただし、からxもキャプチャしaます。タグを削除するにはどうすればよいですか?私がよく知らない簡単な解決策が必要です、

ありがとう!

4

4 に答える 4

6
$("ul li").contents(':not(.close)').text()

children()はテキストノードを返しません。テキストノードとコメントノードを含むすべての子を取得するには、.contents()http://api.jquery.com/children/を使用します

于 2012-06-08T05:43:56.930 に答える
2

カスタム疑似クラスフィルター

テキストノードを取得するための独自の式を記述します。

$.extend( $.expr[":"], {
    textnodes: function( e ) {
        return e.nodeType === 3;
    }
});

$("ul li").contents(":textnodes");

結果として次のコレクションが作成されます。

["text","more text","wohoooo more text"]

フィドル: http: //jsfiddle.net/jonathansampson/T3MQc/

カスタムメソッド

jQuery.fn独自のメソッドを提供するように拡張することもできます。

$.extend( $.fn, {
    textnodes: function() {
        return $(this).contents().filter(function(){
            return this.nodeType === 3;
        });
    }
});

$("ul li").textnodes();

これにより、上記と同じ出力が得られます。

フィドル: http: //jsfiddle.net/jonathansampson/T3MQc/1/

于 2012-06-08T05:53:47.813 に答える
1

これはかなり醜いですが、動作します。ノードのクローンを作成し、すべての子を削除して、最後に残っているテキストを出力します。

$('ul li').clone()
  .children()
    .remove()
    .end()
  .text()

ここで好きな情報からより良いバージョンを引き出すことができました:jQueryでテキストノードを選択するにはどうすればよいですか?

$('ul li').contents().filter(function() {
    return this.nodeType == 3;
}).text()
于 2012-06-08T05:34:03.790 に答える
0
$('ul li')
   .contents()   // target to contents of li
   .filter(function() {    
      return this.nodeType == 3;  // filtering over textnode
}).text();  // get the text value

デモ

于 2012-06-08T05:44:41.713 に答える