次のマークアップを検討してください。
<a href="#"></a>
<a href="#"><img src="foo.png" /></a>
<a href="#">aaa</a>
<a href="#">bbb</a>
jQuery セレクターを使用して、テキストを含む最初のアンカーを取得することは可能ですか (ただし、画像のみが含まれている場合はそうではありません)? (この場合、aaa
1つ)
次のマークアップを検討してください。
<a href="#"></a>
<a href="#"><img src="foo.png" /></a>
<a href="#">aaa</a>
<a href="#">bbb</a>
jQuery セレクターを使用して、テキストを含む最初のアンカーを取得することは可能ですか (ただし、画像のみが含まれている場合はそうではありません)? (この場合、aaa
1つ)
この複雑なセレクターは、最初に要素に子がないことを確認し、次に要素が空でないことを確認します。
var anchor = $("a:not(:has(img)):not(:empty)").eq(0);
jQuery には遅延first
セレクターがないため、フィルタリングする前にすべてのアンカー タグに一致することになります。
$('a').filter(function() {
return $(this).text();
}).first()
これにより、すべての要素をループせずに、コンテナからのテキストを含む最初のアンカーが返されます。
var getFirstAnchorWithText = function (container) {
var anchor = null;
container.find('a').each(function () {
if ($(this).text()) {
anchor = $(this);
return false; // Exits from the loop as soon as the element is found
}
});
return anchor;
}
ここでデモフィドル。
var txtEl;
$('a').each(function(i, el){
var text = $(el).text();
if(text != ""){
txtEl = el;
return false;
}
});
$('a').each(function(){
if($.trim($(this).text()) != ''){
alert($(this).text());
}
});
実際のデモ: http://jsfiddle.net/AGKeY/2/