允许使用document.querySelector中的哪些字符?

时间:2017-08-30 06:32:34

标签: javascript css-selectors selectors-api

目前我正在写一个网络聊天,用户可以用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 选择器。在我的情况下,它很遗憾没有帮助。

2 个答案:

答案 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