所以,我正在尝试用从服务器发送的关卡中创建一个游戏。
每次从服务器收到更新时,我都会循环遍历块。然后,如果块是实体,则将块附加到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允许我查看元素是否已存在。
答案 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>");
}
}