在完善DOM选择时获得意外结果

时间:2013-05-31 01:27:34

标签: jquery node.js jsdom

我有这种非常奇怪的行为,当我尝试获取某些div元素的文本时,在链接多个jQuery函数时,我得到所有以前的“匹配”。

这是我的代码:

var rows = $("tr");
    var groups = [];
    for (var i = 0;i<rows.length;i++){
        if(rows.eq(i).html().toString().match(/TV/i)){
            groups += rows.eq(i).find(":first-child div").text();
        }
    }
    console.log(groups);

现在我期望的输出只是包含在匹配的表行的第一个子节点中的div中包含的文本。 我确实在控制台中得到了这个结果,但在此之前我得到了所有tr的文本,所有匹配的tr.eq(i)),所有td(:first-childtd),所有div s和THEN在输出的最后一位我得到第一个div中包含的文本。

所以groups持有所有类似的东西:

groups += rows.eq(i)
groups += rows.eq(i).find(":first-child")
groups += rows.eq(i).find("div")
groups += rows.eq(i).find("div").text();

我是jQuery的新手,只使用getElementById("myID").getElementsByTagName("div")[0].innerHTML的标准JavaScript选择器,只给我innerHTML中第一个div的{​​{1}}而没有别的

为什么会这样,我怎样才能得到我真正想要的东西?

2 个答案:

答案 0 :(得分:1)

在探索完你的代码后,我想我最终发现你有问题了。由于我们无法看到DOM输出,因此很难说。

无论如何,使用.find(':first-child div')将获得tr中的每个第一个孩子。

示例:

td
-tr <-- Is :first-child (of td)
--div <-- is also :first-child and :first-child div (will get the text of this div)
---div <-- is also :first-child and :first-child div (will get the text of this div)
-tr
--div Is :first-child (of tr)
---div <-- is also :first-child and :first-child div (will get the text of this div)

请尝试使用此代码:

groups.push(rows.eq(i).children(":first-child").find('div').text());

希望它有所帮助(实际上是你的问题)!

答案 1 :(得分:0)

jQuery可以为你循环......

$.each($("tr"), function($index, jsObj)
{
    $jQueryObj = $(jsObj);
    /* ... */
});

.each的替代用法:

$("tr").each(function($index, jsObj)
{
    /* etc */
});

我也相信有一个像.has(":content('TV')")这样的功能,但我现在还不是100%肯定。