jQuery - 选择器无法找到,而它们存在

时间:2014-09-25 10:40:18

标签: jquery html jquery-selectors

我在jQuery中有以下功能:

WeeklySchedule.prototype.FillSchedule = function(jsonData)
{
    for(var i = 0; i < jsonData.ScheduleItems.length; i++)
    {
        var item = jsonData.ScheduleItems[i];
        var itemId = item['TimeScheduleItem']['id'];
        var date = item['TimeScheduleItem']['date'];
        var employerId = item['Employer']['id'];
        var profilePhoto = item['Employer']['profile_photo'];

        $('.day .day-indicator#' + date).siblings('.day-schedule').append('<div class="roster-item left" id="' + itemId + '"></div>');
        $('.roster-item#' + itemId).append('<img class="profile-photo" id="' + employerId + '" alt="" src="/img/' + profilePhoto + '">');
    }

    $('.day-schedule').append('<div class="clear"></div>');
}

基本上,此功能会搜索正确的日期并在当天添加照片。添加“roster-item”容器工作正常。但是使用“itemId”找到相同的容器根本不起作用。

使用“$('。roster-item#'+ itemId)”应该返回刚刚创建的div,但它找不到该div,而它存在于html中。

添加div后的部分HTML:

<div id="3" class="day left ui-droppable">
    <div id="2014-09-25" class="day-indicator today">Thu 25</div>
    <div class="day-schedule">
        <div id="3" class="roster-item left"></div>
        <div class="clear"></div>
    </div>
</div>

添加任何额外的选择器,例如“。day”也不起作用,就像把它放在循环之外一样。它找不到它。
我完全不知道为什么jQuery找不到它。

1 个答案:

答案 0 :(得分:1)

如果您对html中的任何元素使用id,那么它在整个文档中应该是唯一的。并且无需使用id的任何其他选择器,因此请更改以下代码

$('.day .day-indicator#' + date).siblings('.day-schedule').append('<div class="roster-item left" id="' + itemId + '"></div>');
$('.roster-item#' + itemId).append('<img class="profile-photo" id="' + employerId + '" alt="" src="/img/' + profilePhoto + '">');

$('#' + date).siblings('.day-schedule').append('<div class="roster-item left" id="' + itemId + '"></div>');
$('#' + itemId).append('<img class="profile-photo" id="' + employerId + '" alt="" src="/img/' + profilePhoto + '">');

如果您仍然希望将id选择器与class selectore一起使用,那么请将id放在第一位然后将类

$('#' + date+'.day .day-indicator').siblings('.day-schedule').append('<div class="roster-item left" id="' + itemId + '"></div>');
$('#' + itemId+'.roster-item').append('<img class="profile-photo" id="' + employerId + '" alt="" src="/img/' + profilePhoto + '">');