0

我有一个非常奇怪的行为,当我尝试获取某些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-child是 a td),所有divs 和 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 还很陌生,只使用了标准的 JavaScript 选择器 where getElementById("myID").getElementsByTagName("div")[0].innerHTML, 只会给我innerHTML第一个divmyID没有别的。

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

4

2 回答 2

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());

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

于 2013-05-31T12:58:53.567 回答
0

jQuery 可以为你循环...

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

.each 的替代用法:

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

我也相信有类似的功能.has(":content('TV')"),但我目前还不能 100% 确定。

于 2013-05-31T01:36:02.397 回答