2013-07-31 178 views
7

我有很多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包括锚标记的确切内容,但我上面的代码总是会说,它无法找到锚标记。

有人能告诉我什么,我做错了什么?

+3

*'容器+的后代测试 ':有(一)''*你觉得应用的结果'+操作符是一个对象和一个字符串将是? –

回答

8

更改为这样:

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

container是一个jquery对象和.find()是对象内找到的元件的功能。长度大于0将意味着它找到一个锚标记,它将评估为true。

编辑:

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

+0

甜!这很好。谢谢 – Lomse

+0

好点。不应该将一个字符串和一个对象连接起来。它只是不会工作。谢谢 – Lomse

1

您可以使用选择的length属性,以确定是否发现任何元素。试试这个:

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

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

变化

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

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

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

+0

这是行不通的 - 有()实际上将返回容器的jQuery对象子集的值为true它是否含有元素 - http://jsfiddle.net/7V3Hy/3/ – smerny

+0

刚刚意识到“具有”方法返回jQuery对象,将ty很多 –

0

,如果你将其更改为

此致将工作
if($(container+":has(a)").length > 0){ 

In docs

所提供的选择是对的匹配元素

+0

这也不行,你试图用一个字符串来连接容器,将容器从转换一个jQuery对象转换成字符串(“[对象的对象]”),那么你会得到一个语法错误,当你尝试从中创建一个jQuery。这可以起作用:'container.has(“a”).length“,但没有理由检查'> 0'是否将评估为false,并且任何其他结果都评估为true。 – smerny

相关问题