0

我有几个跨度标签,如果存在,我需要检查一些带有具体 id 的跨度标签。

下面的示例虽然返回 false。有什么问题?我在这个链接上有一个例子

html:

<div id="recipient_list">
    <span id="r1"></span>
    <span id="r4"></span>
    <span id="r5"></span>
</div>

javascript:

function check_in_recipient_list (id) {
    $("#recipient_list > span").each( function () {
        existed_id = $(this).attr("id");

        if (existed_id === "r"+id+"") {
            return true;
        }
    });
    return false;
} 

$(document).on("dblclick", function () {
    alert( check_in_recipient_list(1) );
})
4

3 回答 3

3

你为什么不重申你的功能,比如

function check_in_recipient_list (id) {
    return $("#recipient_list > span#r" + id).length > 0;
}

如果层次结构/依赖关系无关紧要,并且具有 id 的元素#r*只能在 under #recipient_list,您也可以选择

function check_in_recipient_list (id) {
    return $("span#r" + id).length > 0;
}

并且..此外,如果具有 id的元素#r*只是span-elements,您也可以这样做

function check_in_recipient_list (id) {
    return $("#r" + id).length > 0;
}
于 2013-05-24T08:44:06.157 回答
1

您的回报是从您提供给的回调中退出each,而不是从check_in_recipient_list函数中退出。

做这个 :

function check_in_recipient_list (id) {
    var found = false;
    $("#recipient_list > span").each( function () {
        var existed_id = this.id; // faster and simpler than using attr, and don't forget var
        if (existed_id === "r"+id+"") {
            found = true;
            return false; // this breaks the iteration
        }
    });
    return found;
} 

请注意,整体可以变得更简单:

function check_in_recipient_list (id) {
    return $("#recipient_list > span#r"+id).length>0
}
于 2013-05-24T08:43:54.057 回答
0

尝试

$("#recipient_list > span[id='"+id+"']").lenght>0
于 2013-05-24T08:47:09.767 回答