2011-02-24 4 views
1

노드가 (반드시) 직계 후손이 아닌 중요하지 않은 구조로 선택된 노드를 래핑하려고합니다. 단 하나의 라이너로 사용하기에는 wrap()이 부족한 것으로 보입니다.jQuery.wrap 내용이 직접적인 자손이 아님

replaceWith을 사용하여 작동 시켰고, 자리 표시 자 구문을 사용하여 replace 원본 html로 작업했습니다. 다음은 잘 작동하고 jQuery 플러그인으로 쉽게 래핑 될 수있다. 그러나 더 나은 해결책이 있다면 궁금합니다.

var template = '<div>\ 
        <div>...</div>\ 
        <div>{{original}}</div>\ 
        <div>...</div>\ 
       </div>'; 

$('p').each(function() { 
    var o = $(this).html(); 
    $(this).replaceWith(template.replace('{{original}}', o)); 
}); 

제안하기

+0

내가 남겨 둘 수는 있겠습니까 ??? – jondavidjohn

+0

@jondavidjohn, 예, 아마 :-) jQuery 플러그인으로 포장하여 잘 작동합니다. 내가 질문을 쓰는 것을 거의 끝내기 전까지는 (위의 그림과 같이) 어떻게해야하는지 알지 못했습니다! 아직이 기능을 내장하고있는 내장 기능이 있다면, 알고 싶습니다. –

답변

1

더 복잡한 템플릿의 경우 jQuery Template Plugin을 살펴볼 수 있습니다. 아직 베타 버전이지만 유연성이 많이 필요합니다. 내 원래의 솔루션은 여전히 ​​더 작지만, jQuery.tmpl() 기능을 사용하면 실행 가능한 솔루션에 가깝습니다. 전술 한 바와 같이 간단한 경우에

, 당신은 like so, 2 라인 플러그인에 포장 떨어져 아마 더 좋을 것 같아 :

$.fn.templateWrap = function(template) { 
    return this.each(function() { 
    var o = $(this).html(); 
    $(this).replaceWith(template.replace('{{original}}', o)); 
    }); 
} 

를 다음 사용하여 전화 :

$('#target').templateWrap('<div>...{{original}}...</div>'); 

(jquery.templatewrap.min.js 다운로드

관련 문제