2014-11-20 2 views
0

divnew XMLSerializer().serializeToString()으로 문자열로 serialize 할 때 직렬화 할 DOM 속성을 선택하고 싶습니다.직렬화 할 속성 선택

예 : 대신 예를 들어

var blah = document.getElementById('blah'); 
 
var blah1 = document.getElementById('blah1'); 
 
blah1.style.top = "100px"; 
 
console.log(new XMLSerializer().serializeToString(blah));
#blah1 { position: absolute; }
<div id="blah"><div id="blah1">Bonjour1</div></div>
, ...

<div xmlns="http://www.w3.org/1999/xhtml" id="blah"><div id="blah1" style="top: 100px;">Bonjour1</div></div> 

... 나는 top 스타일 속성을 제외한 모든 직렬화하고 싶습니다 :

<div xmlns="http://www.w3.org/1999/xhtml" id="blah"><div id="blah1">Bonjour1</div></div> 

new XMLSerializer().serializeToString()을 사용할 때 직렬화 할 속성을 선택하는 방법은 무엇입니까? 당신이

  • 제거를 제거하려는 속성이있는 모든 요소를 ​​찾을 수 node.cloneNode(true)와 트리가 DocumentFragment가
  • 사용 fragment.querySelectorAll("[style]")에 삽입

  • 답변

    3
    1. 깊은 복제가 일치하는 요소에서 속성
    2. 직렬화 조각

    var blah = document.getElementById('blah'); 
    var blah1 = document.getElementById('blah1'); 
    
    blah1.style.top = "100px"; 
    
    var frag = new DocumentFragment() 
    frag.appendChild(blah.cloneNode(true)) 
    
    for(var e of frag.querySelectorAll("[style]")) { 
        e.removeAttribute("style") 
    } 
    
    console.log(new XMLSerializer().serializeToString(frag)) 
    
    ,536,

    파이어 폭스로 테스트했습니다.

    +0

    나는 비슷한 것을 시도했지만 성공하지 못했지만'DocumentFragment'를 사용하지 않았다고 생각합니다. 간단한 코드 예가 ​​있습니까? 현상금을 드리겠습니다. – Basj

    +0

    물론 문제는 없습니다. 하지만 내가 한 모든 일은 네 개의 LoC를 예제에 추가하는 것입니다. – the8472

    +0

    Thanks @ the8472! 마지막으로 한가지 :'style = "top : ..."'부분 만 지우고 싶다면 어떻게 할 것인가? 예를 들어'style = "transform : ...'part를 유지하고 싶습니까? – Basj