我使用jquery来获取和循环数据。在每次迭代时,它必须附加到列表项的链接。我通过条件检查撞墙了。我需要检查一个列表项是否已经有一个链接,如果是这样,只需附加到data-content属性,而不是覆盖当前正在发生的整个链接。
现在代码的方式永远不会打到其他地方,这是没有意义的。我需要新鲜的眼睛指出明显的。
$.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;});
});
});
答案 0 :(得分:0)
问题是$('.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
}
答案 1 :(得分:0)
如果你得到任何物体而不是它有一些长度。那么你就可以使用长度属性。
var xyz = $('.calendar').find("li[id='" + strMonth.toLowerCase() + day + "']").find('a');
if(xyz.length){
//'a' is available there
} else {
//'a' is not available
}