检查span标记是否在链接内

时间:2013-05-30 17:26:08

标签: jquery parent-child

我正在尝试使用不是链接子项的类“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
    }
});

问题是这只适用于上面的第二种情况。即使链接可能不是直接父母,还是要检查这个吗?

7 个答案:

答案 0 :(得分:4)

结帐closest。你可以这样做:

if ($(this).closest('a').length === 0) {

答案 1 :(得分:1)

使用parents()代替parent()来获取层次结构树上方的所有父级。

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

       }
 });

答案 2 :(得分:0)

这个怎么样?

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

<强>更新 我没有考虑到span可能不是直系后代。

if($('.span').closest('a').length !== 0)
    // do stuff

答案 3 :(得分:0)

而不是列出范围$('.blah2'),然后检查它的父级,将您的选择器更改为此类$('a .blah2'),以确保所有<span>实际位于<a>

答案 4 :(得分: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');
    }
});

答案 5 :(得分:-1)

我会用这个

  

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

抱歉$('.blah2').length - $('a ~ .blah2').length

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

答案 6 :(得分:-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));
});
相关问题