jQuery告诉我它无法找到我要求它选择的标签。我有一个类似的选择,工作正常。
这是选择代码:
$(".pageName.ent0#1401183013");
这是标签的样子:
<div class="pageName ent0" id="1401183013">/</div>
当我写console.log($(".pageName.ent0#1401183013").length)
时,它给了我0.它在一个计时器上,因此有一堆连续的这些标签具有相同的属性,但它每次都告诉我0。这些是输出中的复制+粘贴示例。
我在jsFiddle中尝试了这个,并且正如预期的那样,它运行良好,但在实现中却没有。
var inputLog = JSON.parse('<?php echo $jsLog ?>');
var numOfPings = 0;
var inputLogStartInd = -1;
var thisSecond = '<?php echo $startTime ?>';
for(var i = 0; i < inputLog.length; i++){
if(inputLog[i].time >= thisSecond){
inputLogStartInd = i;
thisSecond = inputLog[i].time;
break;
}
}
if(inputLogStartInd!=-1){
var bncEnXCoord = '70%';
var bncStXCoord = '70%';
var thisLogInd = inputLogStartInd;
console.log("thisLogInd: "+thisLogInd);
console.log(inputLog[thisLogInd]);
var pagesListed = new Array();
setInterval(function(){
console.log(inputLog[thisLogInd].time);
console.log(thisSecond+"\n");
if(inputLog[thisLogInd].time==thisSecond){
var entCount = 0;
while(inputLog[thisLogInd].time==thisSecond){
$(".phpPongTable #pages").append('<div class="pageName ent'+entCount+'" id="'+thisSecond+'">'+inputLog[thisLogInd].file+'</div>'); // make pagesListed to handle duplicates
$(".phpPongTable #ips").append('<div class="ipAdd ent'+entCount+'" id="'+thisSecond+'">'+inputLog[thisLogInd].ip+'</div>'); // make ipsListed to handle duplicates
console.log($('.ipAdd.ent'+entCount+'#'+thisSecond)); // This successfully returns the tag
var ipAddTop = ($('.ipAdd.ent'+entCount+'#'+thisSecond).offset().top - $(window).scrollTop());
var ipAddLeft = ($('.ipAdd.ent'+entCount+'#'+thisSecond).offset().left);
$("body").append(
'<div class=".circle ent'+entCount+'" id="'+thisSecond+'" \
style="position:absolute;\
top:'+ipAddTop+';\
left:'+ipAddLeft+';">0</div>');
console.log($('.pageName.ent'+entCount+'#'+thisSecond).length); // This outputs 0 all the time
/////*Error occurs here (Uncaught TypeError: Cannot read property 'top' of undefined )*/////
var pageNameTop = ($('.pageName.ent'+entCount+'#'+thisSecond).offset().top - $(window).scrollTop());
var pageNameLeft = ($('.pageName.ent'+entCount+'#'+thisSecond).offset().left);
$('.circle.ent'+entCount+'#'+thisSecond).animate({
'top':pageNameTop,
'left':pageNameLeft
},2000,
function(){
$(this).animate({
'left':ipAddLeft,
'top':ipAddTop
});
});
thisLogInd++;
entCount++;
}
}
thisSecond++;
console.log("thisNewSecond: "+thisSecond);
},1000);
} else {
console.log("No log entries");
}
答案 0 :(得分:2)
DOM元素的属性类和ID不应该以数字开头。尝试在数字前加上一个字符,并且应该有效。
如果您的应用中有一个以数字开头的多个类或ID,则可能的解决方法如下所示:http://css-tricks.com/ids-cannot-start-with-a-number/
[id='1800number_box'] {
/* does work */
}
#1800number_box {
/* doesn't work */
}
另一种可能的解决方法是:
<body id="69">
body#\36 9 p { color: red; }
其中\ 36是数字6的UTF-8代码,并且必须后跟一个空格(将被忽略),以便引擎知道它是代码的结尾。如此处所述http://www.markinns.com/articles/full/using_numbers_as_css_class_or_id_values
这些示例仅用于样式化CSS,但是使用jQuery选择DOM元素可以执行相同的过程。
无论如何,我建议您使用仅以字符串开头的名称(无数字),以这种方式更容易阅读您的代码。