jQuery - 如何检查父元素是tbody还是thead?

4
我需要检查一个父元素是否是 tbody 或 thead 标签。
我现在有以下代码,但它不起作用:
item.parent("thead")[0] = "<thead>" ? console.log("yes") : console.log("no");

然而,它不起作用。

你有什么提示吗?我做错了什么吗?

谢谢!


你能澄清一下你是要寻找直接父级还是只是检查 item 是否包含在 theadtbody 中吗? - Evan Davis
5个回答

8

如果没有theadparent("thead")会返回空值,那么为什么要使用is呢? - Evan Davis
1
你可以使用 length 属性来检查是否选择了任何元素,而不是使用 is() 方法:if (item.parent("thead").length > 0) {...} - Jasper
1
@Jasper 这正是我回答的内容;在JS中你也不需要 > 0 - Evan Davis
@Mathletics 我不能说这是完全有逻辑的,但我不喜欢使用“truthy” /“falsy”比较。 - Jasper
@Jasper 每个人都有自己的选择,确实如此。 - Evan Davis

4
您可以按如下方式使用.is:
var isthead = item.parent().is("thead") ? "yes" : "no";

请注意,.is会在集合中任何元素匹配时返回true,因此您需要使用.first仅对第一个元素进行测试。

1
parent 只返回一个元素,为什么要使用first - Evan Davis
@Mathletics,你是对的,这里不需要first,但是parent实际上可以返回您提供的任何数量的元素,因为每个元素都可能有一个唯一的父元素。 - Sinetheta
@Sinetheta 我(也许是错误的)假设item是单个元素。 - Evan Davis

1

您可以选择祖先thead标签并检查其length属性以查看它是否存在:

item.parents("thead:first").length > 0 ? console.log("yes") : console.log("no");

这里有一个演示:http://jsfiddle.net/upxyB/

请注意,我使用了:first伪选择器来仅获取第一个匹配项,因为parents()能够返回一组结果(例如,如果您有嵌套的表格)。

顺便说一下,item.parent("thead")[0] = "<thead>"将始终返回true,您需要双等号作为比较运算符:item.parent("thead")[0] == "<thead>"

比较运算符的文档 - https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators


这只检查是否存在thead祖先,而不是它实际的父级。 - Evan Davis
@Mathletics 我不知道 item 是什么,所以我发布了一段代码,无论元素嵌套在哪个级别,它都可以正常工作。因此,你的说法完全正确。 - Jasper

1

您正在将DOM元素与字符串进行比较。您只需要尝试选择并检查长度,以便检查父级是否符合您的要求:

item.parent('thead').length ? console.log('YES') : console.log('NO');

1

尝试:

var item = $("#something");

if (item.parent().get(0).tagName.toLowerCase() === 'thead') 
    alert('parent is thead'); 
else 
    alert('parent is not thead');

它应该能够与ie6+,ff,chrome/safari一起使用。


请注意,tagName 返回的是大写的标签名称。 - pimvdb
你说得对。我忘记发布细节了... tagName在HTML文档中返回大写的标签名称。在XHTML文档中,标签大小写是保留的。将.toLowerCase()添加到答案中。 - al01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接