2010-12-18 7 views
3

EDIT: Ich habe eine Funktion, die eine Zeichenfolge zwischen Tags umschließt. Ich möchte, dass diese Funktion nur angewendet wird, wenn die Zeichenfolge keine Tags enthält. Javascript: strip Tags NUR WENN Tags gefunden

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



Ich brauche eine bedingte Anweisung, die die Tags für bestimmte Tags und Streifen überprüft nur, ob Etiketten gefunden werden.

z. function stripTags(string, "span")

1- Suche nach bestimmten Tags (Spanne in diesem Fall)
2- wenn gefunden, Streifen-Tags

+3

Gerade Streifen-Tags. Wenn es keine gibt, passiert nichts. Keine Notwendigkeit zu betonen oder zu prüfen, "nur wenn gefunden". – deceze

+0

@deceze: Ich versuche, die Zeichenfolge zwischen den Tags nur dann zu umbrechen, wenn sie keine enthält. Ich will das nicht->Text. – Zebra

+0

mit einfachen Tags wie die, die Sie in dem Beispiel gegeben haben, ist dies leicht zu tun, wie in den Antworten unten gezeigt, aber in der realen Welt HTML, wenn Sie die Eingabe nicht kontrollieren werden Sie nie in der Lage, Tags zuverlässig zu identifizieren - zB '' oder mit params in einer anderen Reihenfolge, etc ... Sie können auch nicht einfach davon ausgehen, dass zwischen '<' and '> 'eine Variable ist zB der Text könnte sein '5 < 10 and 10 > 6' – Basic

Antwort

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

erkennt zu entfernen jeder Tag aus der Zeichenfolge oder

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 + '>'; 
    } 
} 

Um umliegenden Tags zu entfernen, wenn sie sie existieren und hinzufügen, wenn sie existieren nicht:

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

Danke, das hat am besten funktioniert – Zebra

+2

Beachten Sie, dass dieser Code keine Attribute berücksichtigt. – Jan

3

Check out:

Quelle:

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

Ich bin nicht sicher, ob das was ich suche. z.B. Ich möchte Span-Tags NUR entfernen, wenn die Zeichenfolge Span-Tags enthält. – Zebra

0

Ich nehme an, Sie suchen nach einer Javascript-Antwort. Ich bin kein jQuery Kerl ... Diese Verwendung des dom macht, so die Umsetzung der Browser kann den Fall zu ändern am Ende oder Fallenlassen Attribute es nicht ...

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; 
}