javascript/jQuery可以';找不到id混乱的元素

javascript/jQuery可以';找不到id混乱的元素,javascript,jquery,jquery-selectors,dynamics-crm-2011,Javascript,Jquery,Jquery Selectors,Dynamics Crm 2011,我正在尝试使用以下id访问MS CRM 2011中的元素: 账户|无关系|表格| B|U生成发票-大额 我可以在IE开发者工具中看到这个元素: 不幸的是,当我试图找到这个元素时,总是得到null 我尝试了以下方法: alert(document.getElementById('account|NoRelationship|Form|B_GenerateInvoice-Large')); alert($("[id='account|NoRelationship|Form|B_Gener

我正在尝试使用以下id访问MS CRM 2011中的元素: 账户|无关系|表格| B|U生成发票-大额

我可以在IE开发者工具中看到这个元素:

不幸的是,当我试图找到这个元素时,总是得到null

我尝试了以下方法:

alert(document.getElementById('account|NoRelationship|Form|B_GenerateInvoice-Large'));
alert($("[id='account|NoRelationship|Form|B_GenerateInvoice-Large]").html());
alert($(jq("account|NoRelationship|Form|B_GenerateInvoice-Large")).html());  // jq() adds the '#' and escapes special characters
alert($("#account|NoRelationship|Form|B_GenerateInvoice-Large").html());
alert(document.getElementById("#account\\|NoRelationship\\|Form\\|B_GenerateInvoice-Large"));
alert($("#account\\|NoRelationship\\|Form\\|B_GenerateInvoice-Large").html());
这些都找不到元素

我是不是漏掉了什么明显的东西

解决方案:

javascript位于iframe内部,而元素位于iframe外部


我没有设法解决它。

这可能是浏览器中的一个错误,因为HTML5规范允许id属性中除了空格以外的任何字符

身份证#

任何字符串,具有以下限制:

必须至少有一个字符长

不能包含任何空格字符

但是,它不允许在id属性中放置任何红色字符,只允许数字、字母和下划线:)

状态:

如果您希望使用 元字符(例如 !“#$%&'()*+,./:;?@[]^`{124;}~)作为 名称的文字部分,您必须 用两个字符转义角色 反斜杠:\\。例如,如果 如果有一个id=“foo.bar”的元素,则 可以使用选择器$(“#foo\\.bar”)。 W3CCSS规范包含

所以试试这个:

$('#account\\|NoRelationship\\|Form\\|B_GenerateInvoice-Large')...


编辑:我已经在Chrome、Firefox 4、IE9、IE8和IE7中成功地测试了我的小提琴,它工作正常。

来自jQuery文档:

如果希望将任何元字符(例如!“$%”和“()*+,./:;?@[]^`{124;}~)用作名称的文字部分,则必须使用两个反斜杠转义该字符:\。例如,如果您有一个id为=“foo.bar”的元素,则可以使用选择器$(“#foo\.bar”)

因此,这应该是可行的:

alert($("#account\\|NoRelationship\\|Form\\|B_GenerateInvoice-Large").html());

确实如此:

页面声明使用的是什么版本的HTML?因为那是一个,但它是一个。(它也是一个函数,如果您使用类似jQuery的东西来查找它,这一点是模糊相关的,因为jQuery使用CSS选择器。)


我可以在Chrome上使用fiddle in,但可能您的页面声明了不同版本的HTML,或者可能是不太高级的浏览器不喜欢它,等等。

Good-response@bazmegakapa我不知道这一点。我环顾了一下四周,似乎有人在谈论使用选择器转义功能,这似乎是个好主意。第三个警报使用jquery.com上的函数jq(),该函数转义这些字符。我试过使用你的字符串,但仍然得到空值。你可以在这里找到转义函数:谢谢你的评论,我会调查的。我刚刚尝试在DOM树中找到一个父元素,但它也没有找到任何东西。我可以在我的代码中执行jQuery ajax调用等,因此我确信jQuery工作正常。。呜呜。我一定会在这里张贴当我找到原因。非常感谢您的帮助。@Thomas您正在运行
$(document).ready()处理程序中的查询吗?确保DOM在您想要在其中找到某些东西的时候启动。这不是@bazmegakapa所说的吗?@t.J.确实是这样。对于jsfiddle链接,他更快了.thx。这让我觉得这个问题与CRM有关。因为HTML5是一个草稿,可以说它不是一个bug,只是一些尚未实现的东西。