带空格的jquery ID

带空格的jquery ID,jquery,Jquery,有人知道如何使用jQuery通过ID选择DOM中的一个项吗,如果该ID有一个空格 例如,我的项目的ID将是 <div id="content Module">Stuff</div> jQuery将尝试查找一个ID为content和ID为Module的项,这不是我要查找的 我应该补充一点,我使用的是一个旧的代码库,其中广泛使用这两个单词ID,因此检查和更改所有ID都是不好的。不要使用空格,原因很简单,空格字符不是有效的ID属性 ID标记必须以字母开头 [A-Za-z]并可

有人知道如何使用jQuery通过ID选择DOM中的一个项吗,如果该ID有一个空格

例如,我的项目的ID将是

<div id="content Module">Stuff</div>
jQuery将尝试查找一个ID为content和ID为Module的项,这不是我要查找的


我应该补充一点,我使用的是一个旧的代码库,其中广泛使用这两个单词ID,因此检查和更改所有ID都是不好的。

不要使用空格,原因很简单,空格字符不是有效的ID属性

ID标记必须以字母开头 [A-Za-z]并可后跟任何 字母数,数字[0-9], 连字符-,下划线-, 冒号:,和句号

但如果您不关心标准,请尝试$[id='content Module']

类似线程>

编辑:HTML4.01和HTML5之间id的区别

HTML5摆脱了对id属性的附加限制。这个 除了文档中唯一的需求之外,剩下的需求是 值必须至少包含一个字符,不能为空, 它不能包含任何空格字符

链接:

一个尝试的想法:

$("#content" + &amp;#032; + "Module").whatever()

$("#content" + %20 + "Module").whatever()
分号可能会导致javascript错误。我还建议将ID更改为没有任何空格


另外,尝试document.getElementByIDcontent模块

Chris建议的方法可能适用于jQuery函数

var element = document.getElementById('content Module');
$(element) ... ;

使用属性选择器

$("[id='content Module']").whatever();
或者,最好也指定标记:

$("div[id='content Module']").whatever();
请注意,与$'id'不同,如果您的页面中有多个id相同的元素,那么它将返回多个元素。

这对我很有效

document.getElementById(escape('content Module'));

为了防止有人好奇,我发现逃离太空是可行的。 当您无法控制目标DOM时(例如,在用户脚本中),这尤其有用:

$("#this\\ has\\ spaces");
请注意双反斜杠,这是必需的。

当它被选中时,您实际上可以使用jQuery来选择它

见:


如果希望元素具有id的精确值,则可以使用此方法

$("[id='content Module']").whatever();
但如果您想检查元素是否只有一个ID,就像类有或没有其他ID一样

$("[id~='content']").whatever();

如果元素的id=content或id=content-Module或id=content-Module-other_-id,则会选择该元素。我在案例中发现,escape不起作用,因为它用%20替换了空格。我使用了替换,例如,用列表项的文本替换页面的h1。如果菜单包含:

<li id="Contact Us"\>Contact Us</li>

function setTitle(menu) {
    $("h1").text( $("li#" + menu.replace(" ", "\\ ")).text() );
}

我在jQuery中遇到了包含逗号和/或空格的元素ID的问题,所以我这样做了,效果非常好:

var ele=$document.getElementById'last,first'

这有空格,但不起作用:

var ele=$‘最后一个,第一个’

这有逗号,不起作用:


var ele=$‘最后一个,第一个’

将选择器上的任何杂项字符与空格一起转义

var escapeSelector=函数字符串{ 字符串=字符串| |; 如果字符串的类型!=='string'返回false; 返回string.replace/:|\.|\[|\]|,|=|@\s|\\\\/g,\\$1; } log$div[data id=+escapeSelectorDocument 0.json+]text;
你好+1。遵循命名标准,当你不遵循它们时,你就不必想出解决办法。这触发了截断显示的第二个单词的想法,这样我就有了有效的ID。处理好这个问题,谢谢!这里引用的是HTML4.01规范。虽然仍然不允许在ID属性值中使用空格字符,但HTML5确实摆脱了大多数限制:不要仅仅因为标准问题就让人检查并破解旧项目的整个代码库。最多,这应该是一个评论,当然不是公认的答案:有趣。空间在大多数情况下都可以正常工作,为什么要让它们变得不标准呢?document.getElementByID会给我常规对象,然后我就无法执行我正在寻找的jQuery函数。然而,在类似的情况下,这将是一个很好的解决方法。$document.getElementByIDcontent模块不会给你一个jquery对象吗?即使是Glavic的答案也是最好的建议。我认为这个答案解决了问题:这对我帮助很大。我正在通过ajax阅读一些糟糕的HTML,无法控制HTML的结构或ID的格式。他们的ID中有空格,所以埃利奥特的答案非常有用,而格拉维奇的答案根本没有帮助。谢谢,回答得很好!啊!应该进一步向下滚动@格拉维奇你所有的陈述都是真实的。然而,新接受的答案将对真正需要此解决方案的人更有帮助。对于那些真正陷入困境的人来说,知道如何处理空间才是他们真正需要的。是的,这是真的,但我的答案也有解决空间ID问题的方法,它甚至是粗体的;向上投票以正确写入ID而不是ID。对不起,小淘气。是的,我知道大多数人用撇号来表示首字母缩略词和缩写词的复数形式,但在我看来它仍然像是杂货店的撇号
如果JavaScript本身在某种其他语言中是字符串常量,则最多4个反斜杠;如果该其他语言本身在另一种语言中是字符串常量,则最多8个反斜杠:当字符串递归转义时,这会导致堆栈溢出
$("[id='content Module']").whatever();
$("[id~='content']").whatever();
<li id="Contact Us"\>Contact Us</li>

function setTitle(menu) {
    $("h1").text( $("li#" + menu.replace(" ", "\\ ")).text() );
}