2013-04-27 139 views
4

我知道jquery .attr()是不区分大小写的属性名称,但是当我从代码创建的文档中创建一个元素时,它变得区分大小写。为什么jquery .attr()在这种情况下变得区分大小写?

这里是解释这个问题的代码示例:

var mydoc = document.implementation.createDocument('a:b','c',null); 
var myElement = mydoc.createElement("myelement"); 
myElement.setAttribute("attr1","val1"); 

alert($(myElement).attr("attr1"));//val1 
alert($(myElement).attr("Attr1"));//undefined! , why? 

var myElement2 = document.createElement("myelement2"); 
myElement2.setAttribute("attr1","val1"); 

alert($(myElement2).attr("attr1"));//val1 
alert($(myElement2).attr("Attr1"));//val1 

我已经测试了镀铬22.0和jQuery 1.8。

UPDATE:

它似乎不是jquery问题。

console.log(myElement.attributes['attr1']); //val1 , OK 
console.log(myElement.attributes['Attr1']); //undefined ??? 

console.log(myElement2.attributes['attr1']); //val1 , OK 
console.log(myElement2.attributes['Attr1']); //val1 , OK 
+0

不知道,也许它会将所有默认的属性名称转换为小写,但为什么你首先需要它不区分大小写? – Dave 2013-04-27 11:32:13

+8

我猜测第一个文档是HTML,而第二个文档是XML。 HTML具有不区分大小写的属性名称,XML不具有。 – Quentin 2013-04-27 11:33:38

+0

属性名称应该总是小写,所以它并不重要。 – Virus721 2013-04-27 11:35:40

回答

1

您需要创建的HTML为DocumentType(https://developer.mozilla.org/en-US/docs/DOM/DOMImplementation.createDocumentType)并作为第三参数传递给createDocument方法

var dt = document.implementation.createDocumentType('html', '', ''); 
var mydoc = document.implementation.createDocument('a:b','c',dt); 

var myElement = mydoc.createElement("myelement"); 
myElement.setAttribute("attr1","val1"); 

console.log(myElement.attributes['attr1']); //val1 , OK 
console.log(myElement.attributes['Attr1']); //val1 , OK !!! 
+0

'document.implementation.createHTMLDocument()'怎么样? – Ouadie 2013-04-27 12:07:16

+0

@Ouadie,这会做同样的事情。我只是考虑了OPs的初始代码,以防需要额外的参数'createDocument'。 – 2013-04-27 12:16:35

相关问题