2008-10-27 2 views
0

물론 문서 유효성과 관련된 가능한 모든 오류가 있습니다. 단락 (p)을 address 요소로 변경하면 즉각적인 걸림돌이 발생합니다. 현재의 방법은 다음과 같습니다.jQuery/plain old javascript를 사용하여 요소 (예 : h1 -> h2)를 변경하려면 어떻게해야합니까?

var p = $('p#test'); 
p.replaceWith('<address>' + p.html() + '</address>'); 

그러나이 경우에는 실패합니다. p -> blockquote 또는 h2 -> h3에서 완벽하게 작동합니다. Firebug는 어떤 이유로 자동 닫기 요소 (<address/>)가 문서에 추가되었다고 제안합니다.

누구든지 버그를 발견하거나 대체 방법을 제안 할 수 있습니까?

+0

이것은 최소한의 페이지에서 나에게 잘 돌아갔다. 귀하의 페이지가 유효합니까? – Zach

+0

로드 할 때 유효한지, 예. HTML 사양을 올바르게 읽는 한, 변경 후에도 유효성을 검사합니다 (즉, 주소가 모든 문맥에서 p를 대체 할 수 있음). –

+0

만약 당신이 무엇이 잘못된 것인지 궁금 할 경우를 대비하여 p.html()은 첫 번째로 일치하는 요소의 html 콘텐츠를 가져옵니다. p.each (...)를 사용하여이 접근법을 사용해야합니다. –

답변

9
var p = $('p#test'); 
var a = $('<address></address>'). 
    append(p.contents()); 
p.replaceWith(a); 

귀하의 솔루션은 끔찍한 HTML 탈출 문제와 가능성 주입 공격의 모든 종류의 적용을받습니다.

+0

Daniel, 답변 주셔서 감사합니다. 그러나 주소 요소가 이미 있다고 가정하지 않으십니까? 몸이 전적으로 "

물건

"으로 구성되어 있으며 나는 그것이 "
물건
" –

+0

아니, 구문 $은 ('

') 다음 페이지를 대체 할 수있는 새로운 주소 요소를 생성되고 싶어 상상해보십시오. 그러나 원래 방금 게시물을 수정했음을 주목하십시오. –

+0

와우 - 저에게 jQuery의 새 비트입니다. 감사합니다. Daniel - 꿈처럼 작동합니다. –

0

당신은 제목 주위에 자리를 사용할 수 있습니다 :

 
<span id="demo"><h1>Title</h1></span> 

그런 다음 innerHTML 속성에 대한 새로운 가치를 창출하기 위해 자바 스크립트 DOM을 사용합니다.

 
<script type="javascript"> 

setTitle = function(id, tag, title) { 
    var container = document.getElementById(id); 
    container.innerHTML = '<' + tag + '>' + title + '</' + tag + '>'; 
} 

setTitle('demo', 'h1', 'My Title'); 

</script> 
+0

왜이 downvoted되었습니다? 이유를 설명하지 않고 이런 식으로 downvote를하는 것은 도움이되지 않습니다. – Ben

+0

owerwrite 전체적으로 을 수행하거나 새로운 문자열로 을 간단히 덮어 쓰시겠습니까? –

관련 문제