检查元素是否包含特定的子元素

时间:2013-07-31 12:23:21

标签: javascript jquery html dom jquery-selectors

我有很多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.
    }

通过container.html()我可以看到包含锚标记的container的确切内容,但我上面的代码总是说它无法找到锚标记。

有人能告诉我我做错了吗?

4 个答案:

答案 0 :(得分:8)

更改为:

if(container.find("a").length){ ...

container是一个jquery对象,.find()是该对象的一个​​函数,用于查找其中的元素。长度大于0意味着它会找到一个锚标记,它将评估为真。

修改

另外,解释为什么你的例子不起作用。执行container+':has(a)'时,您正在执行字符串连接,该对象在您的对象上运行toString()(将其转换为“[object Object]”)。所以你最终会得到字符串“[object Object]:has(a)”,它总是会评估为true。

答案 1 :(得分:1)

您可以使用选择器的length属性来确定是否找到了任何元素。试试这个:

var $container = $(this).closest('.content').find('.text');

if ($('a', $container).length) {
    alert('Contains links'); 
}
else {
    alert('No links found');
}

答案 2 :(得分:1)

更改

if(container+':has(a)'){  

if(container.has('a').size()){  

container是一个jquery对象,而不是选择器字符串

答案 3 :(得分:0)

如果将其更改为

,则可以使用
 if($(container+":has(a)").length > 0){

In docs

  

根据匹配元素的后代

测试提供的选择器