javascript / jQuery找不到ID混乱的元素

问题描述

|| 我正在尝试使用以下ID访问MS CRM 2011中的元素: 帐户|无关系|表格| B_GenerateInvoice-Large 我可以在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之外。 我没有解决。     

解决方法

jQuery选择器手册指出:   如果您想使用任何   元字符(例如   !\“#$%&\'()* +,。/ :; <=>?@ [] ^`{|}〜)作为   名称的文字部分,您必须   用两个逃脱角色   反斜杠:\\\\。例如,如果您   有一个id = \“ foo.bar \”的元素,您   可以使用选择器$(\“#foo \\\\ .. bar \”)。   W3C CSS规范包含   有关有效CSS选择器的完整规则集。 所以试试这个:
$(\'#account\\\\|NoRelationship\\\\|Form\\\\|B_GenerateInvoice-Large\')...
jsFiddle演示 编辑:我已经在Chrome,Firefox 4,IE9,IE8和IE7中成功测试了我的Fiddle,它工作正常。     ,这可能是浏览器中的错误,因为HTML5规范允许id属性中除空格外的任何字符               ID #              任何字符串,具有以下限制:              必须至少一个字符长              不得包含任何空格字符         但是,建议不要在id属性中放置任何奇怪的字符,而只能在其中放置数字,字母和下划线:)     ,从jQuery文档中: 如果您希望使用任何元字符(例如!\“#$%&\'()* +,。/ :; <=>?@ [] ^`{|}〜)作为文字部分名称中,必须使用两个反斜杠对字符进行转义:\\。例如,如果您有一个id = \“ foo.bar \”的元素,则可以使用选择器$(\“”#foo \\。bar \“)。 所以这应该工作:
alert($(\"#account\\\\|NoRelationship\\\\|Form\\\\|B_GenerateInvoice-Large\").html());
而且确实如此:http://jsfiddle.net/Cdz9w/     ,页面声明正在使用什么版本的HTML?因为那是有效的HTML5
id
,但它是无效的HTML4.01和更早的
id
。 (它也是无效的CSS
id
,如果您使用jQuery之类的东西来查找它,这是不相关的,因为jQuery使用CSS选择器。) @bazmegakapa \'s答案中的小提琴在Chrome上对我有用,但是也许您的页面声明了不同版本的HTML,或者也许不太先进的浏览器不喜欢它,等等。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...