jQuery不会选择标签?

时间:2014-06-01 10:07:39

标签: javascript jquery

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");
}

1 个答案:

答案 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元素可以执行相同的过程。

无论如何,我建议您使用仅以字符串开头的名称(无数字),以这种方式更容易阅读您的代码。