0

我正在尝试使用不是链接子级的“blah2”类获得所有跨度。例如,我想要这两个人:

<a href="nowhere.com"><span class="blah1"><span class="blah2"></span></span></a>
<a href="nowhere.com"><span class="blah2"></span></a>

我试过:

$('.blah2').each(function(locator_id){
    if (!$(this).parent().attr("href")){
        //do stuff
    } else {
        //do other stuff
    }
});

问题是这只适用于上面的第二种情况。即使链接可能不是直接父级,是否有任何检查?

4

7 回答 7

4

退房closest。您可以执行以下操作:

if ($(this).closest('a').length === 0) {
于 2013-05-30T17:29:19.567 回答
1

使用parents()而不是parent()获取层次结构树上方的所有父级。

$('.blah2').each(function(locator_id){
       if (!$(this).parents('a').length){
            //do stuff
       } else {
            //don't do stuff

       }
 });
于 2013-05-30T17:29:44.347 回答
0

这个怎么样?

if($(this).parent().is('a'))
    // do stuff

更新 我没有考虑到 aspan可能不是直系后代。

if($('.span').closest('a').length !== 0)
    // do stuff
于 2013-05-30T17:29:38.490 回答
0

而不是列出跨度$('.blah2')然后检查它的父级,将您的选择器更改为类似这样$('a .blah2')的内容,以确保所有<span>内容实际上都在里面<a>

于 2013-05-30T17:32:11.530 回答
0

这也应该适用于您:

http://jsfiddle.net/sanpopo/WfL78/

$(document).ready(function () {
    if($('.blah2').parents().attr("href")){
        alert('I have href parent tags');
    } else {
        alert('I do not have href parent tags');
    }
});
于 2013-05-30T17:39:44.473 回答
-1

我会用这个

$('a .blah2').length //错误

对不起$('.blah2').length - $('a ~ .blah2').length

示例http://jsbin.com/emitoj/7/edit

于 2013-05-30T17:32:51.210 回答
-1

您必须创建一个检查每个父节点的递归函数:http: //jsfiddle.net/TUUba/

function insideLink(el) {
    if(el.parentElement != null) {
        if(el.parentElement.nodeName == "A") {
            return true;
        }
        // Call the function checking the parent element
        return arguments.callee(el.parentElement);
    }
    else {
        return false;
    }
}
$('.blah2').each(function(locator_id) {
    alert("insideLink: " + insideLink(this));
});
于 2013-05-30T17:41:44.027 回答