目前我正在写一个网络聊天,用户可以用URI-GET参数打开一个新的房间。 php部分创建html并将其发送到浏览器。
但是如果用户键入类似/?Mychat%20%231
的URI,我的php会发送一个名为Mychat_#1
的聊天。
这仍然有效,但当我尝试刷新聊天时(每秒钟)我总是得到
SyntaxError:' section.Mychat_#1'不是有效的选择器
每次聊天都是这样的:
<section class="chat-container chat_name_#1"><!-- <- I try to get this node via the chat name -->
<header>
chat_name_#1
</header>
<div class="msg-container" style="">
<section><!-- here the messages will be inserted --></section>
</div>
<footer>
<div class="msg">
<input name="msg" autocomplete="off" type="text">
</div>
<div class="btn">
<button>senden</button>
</div>
</footer>
</section>
在我的main.js文件中,我尝试使用document.querySelector
获取节点for(DATA in CHAT){
let chat = document.querySelector('section.' + CHAT[DATA].title);
// ...
}
正常情况下,类名中允许使用#标签字符(如果它们不以它开头)
<小时/> 我的问题与Which characters are valid in CSS class names/selectors不重复。
在我问之前,我在谷歌搜索并找到它。 我读了它,但只解释了,允许使用 css 选择器。在我的情况下,它很遗憾没有帮助。
答案 0 :(得分:3)
类名中允许使用哈希,但it represents an ID selector。即使您的类名包含哈希,也是如此。因此,您的选择器将被视为类选择器,后跟似乎是ID选择器。这里SYNTAX_ERR的直接原因是ID选择器由一个哈希后跟一个ident组成,一个ident不能以一个数字开头(见section 4 of the CSS2 spec)。
要在类选择器中使用散列,您需要使用反斜杠转义它,但是如果您可以控制生成这些类名的PHP,那么最好只是完全取消哈希值,因为它只是会造成比它值得更多的麻烦。请注意,散列还表示URL中的片段标识符,这就是它在您的网址中编码为%23
的原因(另请参阅Why is "#.id" a bad selector in CSS/jQuery yet it works in an HTML anchor?)。因此两个的原因是不要在类名中使用哈希,因为它在HTML5中是允许的。
答案 1 :(得分:1)
类似选择器似乎不能在其中包含未转义的PUT /my_percolate_index
{
"mappings": {
"doctype": {
"properties": {
"message": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
}
个字符,即使它在#
属性中有效。这是因为未转义的class
会立即发出#
选择器的信号。
一种选择是使用属性选择器。例如......
id