8

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

4 回答 4

8

改成这样:

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

container是一个 jquery 对象,并且.find()是该对象的函数,可在其中查找元素。大于 0 的长度意味着它找到了一个锚标签,并且它的评估结果为真。

编辑:

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

于 2013-07-31T12:24:19.840 回答
1

改变

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

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

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

于 2013-07-31T12:26:07.230 回答
1

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

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

if ($('a', $container).length) {
    alert('Contains links'); 
}
else {
    alert('No links found');
}
于 2013-07-31T12:25:01.653 回答
0

如果您将其更改为,您的将起作用

 if($(container+":has(a)").length > 0){

在文档中

提供的选择器针对匹配元素的后代进行测试

于 2013-07-31T12:27:05.180 回答