2012-07-11 5 views
7

에서 스트립 모든 특정 HTML 태그는 I는 다음과 같은 텍스트와 HTML 태그의 문자열이 포함 된 변수를 가지고있다. 예를 들어 pspan 태그를 모두 가정 해 보겠습니다. strip span tags from string with jquery :jQuery를 : 나는 어떤 유형의 모든 태그를 제거하려는</p> <pre><code>var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; </code></pre> <p>: 문자열

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
var $temp = $(temp); 
$("p", $temp).replaceWith("foo"); 
alert($temp.html()); //returns "Some text" 

내가 찾을 수있는 가장 가까운 응답 닉 Craver하여이 대답 :

내가 가지고 올 수있는 최선이다.

+0

그 _certain의 type_은 무엇인가 :보다 일반적인 기능으로

? – undefined

+0

수정 된 질문 : p 태그와 span 태그를 바꿀 수 있습니다. 그러나 이것은 미래에 바뀔 수 있습니다. – iammatthew2

답변

12

데모 : http://jsfiddle.net/VwTHF/1/

$('span, p').contents().unwrap(); 

.contents() 각 같은 태그 내의 요소와 텍스트를 얻을 것이며, .unwrap 각 콘텐츠 섹션을 배치하는 요소를 제거한다. 현재의 접근 방식을 기반으로

는 다음과 같이 보일 것입니다 :

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
var $temp = $(temp); 
$temp.find('span, p').contents().unwrap().end().end(); 

원래 객체를 대상으로 계속하려면 필터를 취소 .end()을 사용해야합니다.

+0

희망 사항을 이해하지 못했습니다. 태그를 없애고 텍스트를 그대로 두려고합니다. – nbrooks

+0

예, 특정 태그를 제거하고 텍스트 및 기타 모든 태그를 유지하기 만하면됩니다. 하지만 위의 예제가이 예제에서 작동하지 못했습니다. [http://jsfiddle.net/nEFhA/] – iammatthew2

+0

@ iammatthew2 완벽하게 작동합니다. jQuery를 포함하는 것을 잊었다 : http : // jsfiddle.net/WPpqE/(왼쪽의 옵션에서 사용할 프레임 워크를 지정해야합니다) – nbrooks

2

jquery plugin HTML Clean을 사용해보세요. 예에서 그들은 제공 : 당신은 {removeTags:[p]}으로 특정 태그를 대체 할 수 있으며 여전히 그냥 태그 내용을 렌더링

$.htmlClean("<H1 class=\"header\"><P>Nested P Test</H1>", {format:true}); 

=> 
<h1> 
     Nested P Test 
</h1> 

.

+0

고마워요! 이것을 시도해 볼 것이지만, 몇 줄의 코드로 Jquery가이를 처리 할 수 ​​있다고 생각했습니다. – iammatthew2

0

나는 유사한 것을해야했다 : <b>, <i> 또는 <u> 이외의 HTML 태그를 포함하는 텍스트 블록을 유지한다. 이 질문과 몇몇 다른 사람들은 내 자신의 기능을 향해 나를 가리켰다.

function cleanNonFormattingTags(htmlContents) { 
    if (htmlContents && htmlContents.length) { 
     var result = ''; 
     htmlContents.each(function() { 
      var $child = $(this), type = $child.prop('tagName'), isTextNode = this.nodeName == "#text"; 
      if (isTextNode) { 
       result += this.textContent; 
      } 
      else if (type == 'B' || type == 'U' || type == 'I' || type == 'BR') { // Allow only these types of tags 
       var innerContent = cleanNonFormattingTags($child.contents()); 
       var $newTag = $(document.createElement(type)).html(innerContent); 
       result += $newTag[0].outerHTML; 
      } 
      else { 
       result += cleanNonFormattingTags($child.contents()); 
      } 
     }); 
     return result; 
    } 
    return htmlContents.text(); 
} 

희망이있다.

0

@nbrooks에 대한 답변은 사용자의 질문에 매우 근접해 있기 때문에 후속 작업을하겠습니다. @nbrooks는 html()이 태그에 래핑 된 데이터를 제공한다는 점을 지적하여 솔루션을 공격했습니다. 해결책은 태그에 HTML을 래핑하는 것입니다. 이렇게하면 트릭을 수행해야합니다.

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
$("<span>" + temp + "</span>").find('span,p'). 
    contents().unwrap().end().end().html()` 

예를 들어 http://jsfiddle.net/18u5Ld9g/1/을 참조하십시오.

function stripTags(html, tags) { 
    // Tags must be given in CSS selector format 
    return $("<span>" + html + "</span>").find(tags). 
    contents().unwrap().end().end().html(); 
}