引用带有mutliple变量的HTML ID

时间:2015-08-02 14:33:47

标签: javascript jquery html

所以,我正在尝试用从服务器发送的关卡中创建一个游戏。

每次从服务器收到更新时,我都会循环遍历块。然后,如果块是实体,则将块附加到html文档(如果它尚不存在)。

if(blocks[blockCount].solid === true){
            if($("#" + blocks[blockCount].posX.toString() + "," + blocks[blockCount].posY.toString()).length > 0){
               alert("Block already exists");
            }else{
                $("body").append("<div style='height: " + blockSize + "px;width:  " + blockSize + "px;background-color: blue;position: absolute;display: inline;margin-left: " + blocks[blockCount].posX * blockSize + "px;margin-top: " + blocks[blockCount].posY * blockSize + "px;' id='" + blocks[blockCount].posX.toString() + "," + blocks[blockCount].posY.toString() + "'> </div>");
            }
        }

块[blockCount] .posX和Y都应该等于4.但由于某些原因它们一直被创建,if语句由于某种原因不起作用。你能解释一下为什么吗?或发布正确的代码。非常感谢你的帮助。 :)

我在这里学到了:How to check if element exists in the visible DOM?

jquery .length允许我查看元素是否已存在。

2 个答案:

答案 0 :(得分:4)

你不能拥有一个ID(或类别)[见评论,你可以,但为什么要为自己的生活而努力] - 因为a,用作CSS中的分隔符..即< / p>

#id1,div会选择ID =“id1”且任意div

的元素

你正在创建id为“123,456”的元素 - 作为CSS选择器将是#123,456

解决方案:尝试使用_代替,

另外,我不确定一个id是否允许以数字开头,但不是我就是这样,如果没有,只是在你的身份前加上x或其他

注意:HTML5规范允许ID以数字开头,但是,它在CSS选择器中也不起作用(对于CSS至少,没有使用jQuery或querySelector [All]进行测试)

你最终会得到像x123_456这样的id - 这没关系

答案 1 :(得分:1)

由于,在CSS中具有特殊含义,因此您必须在选择器中转义。要编写一个定位id="foo,bar"元素的CSS选择器,您必须编写#foo\,bar。在jQuery选择器中允许你这样做,但你需要记住JS语法并编写$("#foo\\,bar")来实现你想要的东西(第一个反斜杠是逃避JS字符串中的第二个)。

另外,正如Jaromanda X指出的那样,ID不能以数字开头,所以你必须在信件前加上。

总而言之,您的代码可能如下所示:

if(blocks[blockCount].solid === true){
    if($("#x" + blocks[blockCount].posX.toString() + "\\," + blocks[blockCount].posY.toString()).length > 0){
       alert("Block already exists");
    } else {
        $("body").append("<div style='height: " + blockSize + "px;width:  " + blockSize + "px;background-color: blue;position: absolute;display: inline;margin-left: " + blocks[blockCount].posX * blockSize + "px;margin-top: " + blocks[blockCount].posY * blockSize + "px;' id='x" + blocks[blockCount].posX.toString() + "," + blocks[blockCount].posY.toString() + "'> </div>");
    }
}