2011-11-10 1 views
9

나는 새로운 $.parseXML() 메서드를 jQuery 1.5와 함께 사용 해왔다. 새 요소를 XML 객체에 삽입 할 때마다 해당 새 요소는 자동으로 값이 "http://www.w3.org/1999/xhtml"인 'xmlns'속성을 가져옵니다.jQuery가 XML 객체에 'xmlns'속성을 삽입하지 못하게하려면 어떻게해야합니까?

<five xmlns="http://www.w3.org/1999/xhtml">some value</five> 

가 어떻게이 '의 xmlns'속성을 삽입하는 jQuery를 방지 않습니다

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>')); 

코드는 다음과 같은 요소를 만듭니다 예를 들어, 아래 코드를 참조? 내가 .removeAttr() 메서드를 사용하여 시도했지만 심지어 작동하지 않는 것. 어떤 아이디어?

업데이트 : 사용자 nrabinowitz가 제안한 제안은이 문제를 해결하는 데 도움이되었습니다. 최상위 요소에 xlmns 속성을 추가하면 xlmns 속성이 새로운 각 요소에 자동으로 지정되지 않습니다. 아직도, 나는 나의 특정한 프로그램을위한 다른 해결책을 선택했다. 대신 XML 객체를 웹 페이지에 표시 할 문자열로 변환 한 후에 .replace() 메서드를 사용하여 모든 xlmns 특성을 제거했습니다.

+3

루트 요소에 고유 한 XMLNS 속성을 추가하려 했습니까? 명시 적 네임 스페이스가없는 경우 jQuery의 기본값은 XHTML입니다. – nrabinowitz

+3

jQuery 자체가 전혀 XML 파싱을 수행하지 않는다고 생각합니다. 대신, 브라우저가 할 수 있습니다. (jQuery에 완전한 XML 파서가 내장되어 있다면, 그것은 더욱 커질 것이다. * 편집 * yup은 소스를 검사했다. XML을 "DOMParser"인스턴스로 넘겨 준다. – Pointy

답변

3

당신이 이런 식으로 할 필요가

$(myXml).find('three').append('<five>some value</five>'); 
+0

이것은 나를 위해 일했습니다. 고마워요. – Chris

+0

도 나를 위해 일했지만 케이스에 ' 요소를 원하는대로 추가했습니다. – BobbyTables

+0

Chrome에서 완벽하게 작동했지만 IE 11에는 아무 것도 추가되지 않았습니다. 그것을 테스트하십시오 : http://jsfiddle.net/eygqwwgt/2/ 당신은 단서가 있습니까? – Bjoerg

0

사용하려고 : 어떻게됩니까

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 

myXml = $.parseXML(myXml); 

var el=xmlDoc.createElement("yourElement"); 

$(myXml).find('three').append($(el)); 
+0

당신의 솔루션은 여전히 ​​"yourElement"태그 안에 네임 스페이스를 제공합니다. 참조 : http://jsfiddle.net/Lzfg7zpv/ – Bjoerg

1

는 삽입하는 노드가 다른 이름 공간 URI 속성을 가지고 있다는 것입니다.

$($.parseXML('<node/>'))[0].namespaceURI 
// null 

$ .parseXML에서 파생

노드 귀하의 생성 된 노드

$('<node>')[0].namespaceURI 
// "http://www.w3.org/1999/xhtml" 

당신은 당신의 생성 된 노드는 값 null의 이름 공간 URI를 갖고 싶어.

생성 된 노드가 jQuery를 사용하여 네임 스페이스를 상속 받도록하려면 원래 노드를 $('<five>some value</five>', myXml)과 같은 $()의 두 번째 인수로 제공하십시오.

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>', myXml)); 
관련 문제