4

我正在尝试使用以下 id 访问 MS CRM 2011 中的元素:account|NoRelationship|Form|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 之外。

我没有设法解决它。

4

4 回答 4

7

jQuery 选择器手册指出:

如果您希望使用任何元字符(例如 !"#$%&'()*+,./:;<=>?@[]^`{|}~ )作为 a 的文字部分名称,您必须使用两个反斜杠转义字符:\\。例如,如果您有一个 id="foo.bar" 的元素,则可以使用选择器 $("#foo\\.bar")。W3C CSS 规范包含 有关有效 CSS 选择器的完整规则集

所以试试这个:

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

jsFiddle 演示

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

于 2011-05-25T09:13:47.983 回答
0

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

ID #

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

必须至少有一个字符长

不得包含任何空格字符

但是,鼓励不要在 id 属性中放置任何奇怪的字符,只有数字、字母和下划线:)

于 2011-05-25T09:13:11.993 回答
0

来自 jQuery 文档:

如果您希望使用任何元字符(例如 !"#$%&'()*+,./:;<=>?@[]^`{|}~ )作为 a 的文字部分name,你必须用两个反斜杠转义字符:\。例如,如果你有一个 id="foo.bar" 的元素,你可以使用选择器 $("#foo\.bar")。

所以这应该工作:

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

确实如此:http: //jsfiddle.net/Cdz9w/

于 2011-05-25T09:17:56.210 回答
0

页面声明它使用的是什么版本的 HTML?因为这是一个有效的 HTML5id,但它是一个无效的 HTML4.01 及更早版本id。(它也是一个无效的 CSSid,如果你使用 jQuery 之类的东西来查找它,这也是模糊的相关,因为 jQuery 使用 CSS 选择器。)

@bazmegakapa 的答案中的小提琴在Chrome 上对我有用,但也许您的页面正在声明不同版本的 HTML,或者可能是不太先进的浏览器不喜欢它,等等。

于 2011-05-25T09:20:25.870 回答