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

我不明白为什么前两种方法在每一行打印元素,而第二种方法将它们连接起来。rv2是一个 jQuery 对象。那么,前两个(rv1_wlengthrv1_wolength)是什么?

此外,我不明白为什么包含长度属性会在过滤元素时产生所有差异。第二种方法什么都不做,因为它返回所有元素。第一种方法,唯一的改变是增加了长度属性,正确地过滤了元素。我非常想要逐行解释。

我真诚地感谢任何反馈。谢谢你。

4

2 回答 2

1

此代码获取所有 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 内的文本,其中包含换行符。在第二个中,它连接了 h3s 中没有的文本。

于 2012-06-07T16:41:53.430 回答
1

在元素<h3>但在元素内有带有换行符的文本节点<div>。换行符会在由alert(). 当您刚刚获取<h3>内容时,没有换行符。

于 2012-06-07T16:43:00.667 回答