我有这种非常奇怪的行为,当我尝试获取某些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
是td
),所有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}}而没有别的
为什么会这样,我怎样才能得到我真正想要的东西?
答案 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%肯定。