2010-12-18 3 views
3

EDIT : 태그 사이에 문자열을 감싸는 함수가 있습니다. 문자열에 태그가없는 경우에만이 함수를 적용하겠습니다. Javascript : strip tags 태그가 발견 된 경우에만

if string: "text" then "<b>text</b>"; 
else if string "<b>text</b>" then "text"; 



나는 주어진 태그를 확인하고 태그가 발견되는 경우에만 태그를 제거합니다 조건문이 필요합니다.

예 : 주어진 태그 function stripTags(string, "span")

1 검색 (이 경우 스팬)
발견하는 경우 2, 스트립 태그

+3

그냥 스트립 태그를. 아무 것도 없으면 아무 일도 일어나지 않습니다. "발견 된 경우에만"강조하거나 확인할 필요가 없습니다. – deceze

+0

@deceze : 태그에 문자열이 들어 있지 않은 경우에만 문자열 사이를 감싸려고합니다. 나는 이것을 원하지 않는다 ->텍스트. – Zebra

+0

예제에서 제공 한 것과 같은 간단한 태그가있는 태그는 아래 답변에서 보여지는 것처럼 쉽게 수행 할 수 있지만 실제 HTML에서는 입력을 제어하지 않으면 신뢰할 수없는 태그를 식별 할 수 없습니다 예를 들어''또는 다른 순서로 매개 변수와 함께 ... '<' and '>'사이의 태그가 태그라고 가정 할 수는 없습니다 텍스트가 '5 < 10 and 10 > 6' – Basic

답변

6
function stripTags(string, tag) { 
    var tagMatcher = new RegExp('</?' + tag + '>','g'); 
    return string.replace(tagMatcher, ''); 
} 

제거 ... 아닌 jQuery를 사람이 ... 이것은 DOM을 사용한다, 그래서 브라우저의 구현이 경우 변경 끝낼 수, 낙하가 인식 할 수없는 속성 해요 어떤 문자열에서 태그 또는

function toggleSurroundingTags(string, tag) { 
    var tagMatcher = new RegExp('^<' + tag + '>(.*)</' + tag + '>$'); 
    var match = tagMatcher.exec(string); 
    if (match) { 
    return match[1]; 
    } else { 
    return '<' + tag + '>' + string + '</' + tag + '>'; 
    } 
} 

이 존재하는 경우 태그를 둘러싼 제거가 존재하지 않는 경우를 추가하려면 :

toggleSurroundingTags('hello', 'b'); // returns '<b>hello</b>' 
toggleSurroundingTags('<b>hello</b>', 'b'); // returns 'hello' 
+0

감사합니다.이 방법이 가장 효과적입니다. – Zebra

+2

이 코드는 계정에 어떤 속성도 사용하지 않습니다. – Jan

3

체크 아웃 :

출처 :

function strip_tags (input, allowed) { 
    // http://kevin.vanzonneveld.net 
    // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Luke Godfrey 
    // +  input by: Pul 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman 
    // +  input by: Alex 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Marc Palau 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Brett Zamir (http://brett-zamir.me) 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Eric Nagel 
    // +  input by: Bobby Drake 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Tomasz Wesolowski 
    // +  input by: Evertjan Garretsen 
    // + revised by: Rafał Kukawski (http://blog.kukawski.pl/) 
    // *  example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>'); 
    // *  returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>' 
    // *  example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>'); 
    // *  returns 2: '<p>Kevin van Zonneveld</p>' 
    // *  example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>"); 
    // *  returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>' 
    // *  example 4: strip_tags('1 < 5 5 > 1'); 
    // *  returns 4: '1 < 5 5 > 1' 
    // *  example 5: strip_tags('1 <br/> 1'); 
    // *  returns 5: '1 1' 
    // *  example 6: strip_tags('1 <br/> 1', '<br>'); 
    // *  returns 6: '1 1' 
    // *  example 7: strip_tags('1 <br/> 1', '<br><br/>'); 
    // *  returns 7: '1 <br/> 1' 

     allowed = (((allowed || "") + "") 
      .toLowerCase() 
      .match(/<[a-z][a-z0-9]*>/g) || []) 
      .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>) 
     var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, 
      commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi; 
     return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){ 
      return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; 
     }); 
    } 
+0

일 수 있습니다. 이것이 내가 찾고있는 것이 확실하지 않습니다. 예. 문자열에 span 태그가 포함 된 경우에만 span 태그를 제거하고 싶습니다. – Zebra

0

나는 자바 스크립트 답변을 찾고 있다고 가정합니다. 나는

function stripTags(string) { 
    if (!arguments.callee._tempNode) { 
     arguments.callee._tempNode = document.createElement('div'); 
    } 
    var node = arguments.callee._tempNode; 
    node.innerHTML = string; 

    var i=arguments.length; 
    while (--i) { // decrement first so the string var won't be processed 
     var toRemove = node.getElementsByTagName(arguments[i]); 
     while (toRemove.length) { 
      toRemove[0].parentNode.removeChild(toRemove[0]); 
     }   
    } 
    return node.innerHTML; 
}