Javascript: полосы теги ТОЛЬКО ЕСЛИ теги найдены - PullRequest
3 голосов
/ 18 декабря 2010

РЕДАКТИРОВАТЬ: У меня есть функция, которая оборачивает строку между тегами.Я хочу, чтобы эта функция применялась, только если строка не содержит никаких тегов.

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

Мне нужен условный оператор, который проверяет наличие заданных тегов и удаляет теги, только если теги найдены.

например.function stripTags(string, "span")

1 - поиск по заданным тегам (в данном случае диапазон)
2 - если найден, теги с полосами

Ответы [ 3 ]

6 голосов
/ 18 декабря 2010
function stripTags(string, tag) {
  var tagMatcher = new RegExp('</?' + tag + '>','g');
  return string.replace(tagMatcher, '');
}

для удаления любого тега из строки или

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'
3 голосов
/ 18 декабря 2010

Выезд:

Источник:

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 голосов
/ 18 декабря 2010

Полагаю, вы ищете ответ на JavaScript. Я не JQuery парень ... Это использует DOM, поэтому реализация браузера может в конечном итоге изменить регистр или отбрасывать атрибуты, которые он не распознает ...

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...