8

時々リンクを含む多くdivの があります。リンクがあるかどうかを確認したい。これは私の試みです:

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){ ...

containerjquery オブジェクトであり.find()、そのオブジェクト内の要素を検索するそのオブジェクトの関数です。0 より大きい長さは、アンカー タグが見つかったことを意味し、true と評価されます。

編集:

また、あなたの例がうまくいかない理由を説明するために。を実行すると、オブジェクトで実行さcontainer+':has(a)'れる文字列連結が実行toString()されます (「[object Object]」に変換されます)。したがって、常に true と評価される文字列 "[object Object]:has(a)" になります。

于 2013-07-31T12:24:19.840 に答える
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 に答える