按 id 查找元素并追加 link

find element by id and append link

我正在使用 jquery 来获取和循环数据。在每次迭代中,它必须将 link 附加到列表项。我用条件检查碰壁了。我需要检查一个列表项是否已经有一个 link,如果是的话,只需附加到 data-content 属性而不是覆盖整个 link,这是当前正在发生的。

代码现在的方式永远不会碰到 else,这没有意义。我需要新的眼光来指出显而易见的事情。

$.ajax({
    type: 'GET',
    url: 'training/calendar',
    datatype: 'json'
})
.done(function (data) {
    $.each(data, function(k, v){
        var date = new Date(v.date);
        var day = date.getDate();
        var month = date.getMonth();
        var strMonth = textMonth(month);

        if ($('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").find('a')) {
            var $this = $("li[id='" + strMonth.toLowerCase() + day + "']").find('a');
            $($this).data('content', $($this).data('content') + "--------------" + v.name + ' ' + v.address);
        } else {
            $('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").text('').addClass('event').css({
                'border-radius': '24px',
                'background-color': v.colour
            })
            .append("<a href='#' tabindex='0' role='button' " +
            "data-toggle='popover' data-trigger='focus' data-placement='top' " +
            "data-content='" + v.name + ', ' + v.address + "' class='details'>" + day + "</a>");
        }
        $("[data-toggle='popover']").popover();
        $('a.details').on('click', function(e) {e.preventDefault(); return true;});
    });
});

问题是 $('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").find('a') 永远不会输出 false。它会给出一个 jQuery 对象,即使它什么也没找到。

如下更改您的 if 语句,您应该会得到更好的结果:

var a = $('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").find('a');

if ( a.get(0) != undefined ) {
    // .get(0) will retrieve the DOM element from a jQuery object. 
    // If the DOM element doesn't exist, it will return undefined
}

如果你得到的任何对象比它有一些 length.so 你可以使用长度 属性.

var xyz = $('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").find('a');

if(xyz.length){


  //'a' is available there  
} else {

 //'a' is not available
}