0

HTMLは次のとおりです。

<div>
    <h3>text</h3>
</div>
<div>
    <h3>moretext</h3>
</div>
<div>
    <h3>123</h3>
</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

JS は次のとおりです。

var rv1_wlength = $("div").filter(function() {
    return $(this).find("h3").filter(function () {
        return $(this).text() != "123";
    }).length;
});

var rv1_wolength = $("div").filter(function() {
    return $(this).find("h3").filter(function () {
        return $(this).text() != "123";
    });
});

var rv2 = $("div").find("h3").filter(function() {
    return $(this).text() != "123";
});

alert(rv1_wlength.text());   // text
                             // moretext

alert(rv1_wolength.text());  // text
                             // moretext
                             // 123

alert(rv2.text());​           // textmoretext

最初の 2 つのメソッドが要素を各行に出力するのに対し、2 番目のメソッドは要素を連結する理由がわかりません。rv2jQuery オブジェクトです。では、最初の 2 つ (rv1_wlengthrv1_wolength) は何ですか?

さらに、長さプロパティを含めると、要素のフィルタリングに大きな違いが生じる理由がわかりません。2 番目のメソッドは、すべての要素を返すため、何もしません。最初の方法は、長さプロパティを追加するだけで、要素を正しくフィルター処理します。行ごとの説明が非常に欲しいです。

フィードバックをいただければ幸いです。ありがとうございました。

4

2 に答える 2

1

要素の外側<h3>要素の内側に改行があるテキストノードがあります<div>。改行により、によって表示されたダイアログで改行が発生しalert()ます。内容を取得するだけ<h3>では、改行はありません。

于 2012-06-07T16:43:00.667 に答える
1

このコードは、テキストが ではない少なくとも 1 つ の div 要素を含むすべての div 要素を取得します。h3"123"

var rv1_wlength = $("div").filter(function() {
    return $(this).find("h3").filter(function () {
        return $(this).text() != "123";
    }).length;
});

このコードは役に立たない:

var rv1_wolength = $("div").filter(function() {
    return $(this).find("h3").filter(function () {
        return $(this).text() != "123";
    });
});

コールバック関数は常に真の値を返すため、元の選択 が$('div')返されます (空の jQuery セットは依然として真と見なされます)。


最後に、このコードは、テキストが ではないすべての h3 要素を取得します"123"

var rv2 = $("div").find("h3").filter(function() {
    return $(this).text() != "123";
});

を呼び出すと.text()、jquery は選択範囲内のすべての要素のテキストを連結します。最初のケースでは、改行を含む div 内のテキストを連結しています。2 つ目は、そうでない h3s 内のテキストを連結しています。

于 2012-06-07T16:41:53.430 に答える