2013-07-31 174 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

相關問題