javascript 检查元素是否包含特定的子元素
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17970323/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Check if an element contains a specific child element
提问by lomse
I have many div
s which sometimes contain links. I want check whether or not they have a link. This is my attempt:
我有很多div
s 有时包含链接。我想检查他们是否有链接。这是我的尝试:
var container = $(this).closest('.content').find('.text');
//Check if text contains a tags
if(container+':has(a)'){
alert('contain link');
}
else{
alert('no link found'); //Alert "contain link" even if no link is found.
}
By doing container.html()
I can see the exact content of container
including anchor tags, but my code above will always say that it cannot find the anchor tag.
通过这样做,container.html()
我可以看到container
包含锚标记的确切内容,但是我上面的代码总是说它找不到锚标记。
Could someone tell me what I am doing wrong?
有人能告诉我我做错了什么吗?
采纳答案by Dallas
Change to this:
改成这样:
if(container.find("a").length){ ...
container
is a jquery object and .find()
is a function of that object that finds elements within it. A length greater than 0 will mean it finds an anchor tag and it will evaluate to true.
container
是一个 jquery 对象,并且.find()
是该对象的一个函数,用于在其中查找元素。大于 0 的长度将意味着它找到了一个锚标签,并将评估为真。
Edit:
编辑:
Also, to explain why your example isn't working. When you do container+':has(a)'
, you are doing a string concatenation which runs toString()
on your object (converting it to "[object Object]"). So you end up with the string "[object Object]:has(a)" which will always evaluate to true.
另外,解释为什么你的例子不起作用。当您这样做时container+':has(a)'
,您正在执行toString()
在您的对象上运行的字符串连接(将其转换为“[object Object]”)。所以你最终得到字符串“[object Object]:has(a)”,它总是评估为真。
回答by Rory McCrossan
You can use the length
property of a selector to determine if any elements were found. Try this:
您可以使用length
选择器的属性来确定是否找到了任何元素。试试这个:
var $container = $(this).closest('.content').find('.text');
if ($('a', $container).length) {
alert('Contains links');
}
else {
alert('No links found');
}
回答by Vitaly Muminov
Change
改变
if(container+':has(a)'){
To
到
if(container.has('a').size()){
container is an jquery object, not a selector string
容器是一个 jquery 对象,而不是一个选择器字符串