jQuery (почти) эквивалент PHP strip_tags () - PullRequest
32 голосов
/ 09 апреля 2011

Существует ли версия этой функции в jQuery?

строка strip_tags (строка $ str [, строка $ allowable_tags])

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

как:

var stripped = strip_tags($('#text').html(), '<p><em><i><b><strong><code>');

от

<div id="text">
  <p> paragraph </p>
  <div> should be stripped </div>
</div>

Ответы [ 9 ]

33 голосов
/ 09 апреля 2011

Чтобы удалить только теги, а не содержимое , как ведет себя PHP strip_tags(), вы можете сделать:

var whitelist = "p"; // for more tags use the multiple selector, e.g. "p, img"
$("#text *").not(whitelist).each(function() {
    var content = $(this).contents();
    $(this).replaceWith(content);
});

Попробуйте здесь.

21 голосов
/ 03 мая 2012

Для удаления всех тегов вы можете использовать

$('<div>Content</div>').text()
12 голосов
/ 31 октября 2013

Просто используйте регулярное выражение:

html.replace( /<.*?>/g, '' );

Готово.:)

Для тега p:

html.replace( /<[^p].*?>/g, '' );

Для других тегов все становится сложнее.

5 голосов
/ 26 августа 2014

Это сработало для меня:

function strip_tags(str) {
    str = str.toString();
    return str.replace(/<\/?[^>]+>/gi, '');
}
4 голосов
/ 09 апреля 2011

Не фактический ответ, но слово предостережения (в зависимости от того, что вы пытаетесь с этим сделать):

ИМХО, почти в во всех случаях санация ввода должна бытьсделано на стороне сервера (в этом случае, используя родные функции PHP).Если ваше намерение состоит в том, чтобы заменить функциональность PHP на функциональность на стороне клиента, я бы настоятельно посоветовал против этого.

Почему?

Только потому, что выВы создаете сайт, это не значит, что:

  1. У ваших пользователей включен JavaScript.Если вы не отправляете свою форму строго через сценарий (с помощью кнопок отправки и т. Д.), Она по-прежнему позволяет пользователям отправлять недопустимые данные (например, теги и т. Д.)
  2. На самом деле запросы могут не инициироватьсябраузером вообще, обходя любую дезинфекцию ввода на основе JS.

Опять же, на самом деле не отвечаю на ваш вопрос, но предостерегаю вас в зависимости от того, куда вы могли бы направиться, основываясь на вашем вопросе :)

3 голосов
/ 16 января 2017

Чтобы удалить все теги, можно использовать:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");

Код от: Обрезать теги HTML в JavaScript

1 голос
/ 29 сентября 2017

Даже если это старая ветка, я думаю, что она может быть полезна для тех, кто все еще ищет ответ.

Функция Locutus.io кажется лучшим решением:

function strip_tags (input, allowed) {
      allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
      var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi
      var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
      return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
      })
}

Пример 1:

strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>')

возвращает 1: 'Kevin <b>van</b> <i>Zonneveld</i>'

Пример 2:

strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>')

возвращает 2: '<p>Kevin van Zonneveld</p>'

Пример 3:

strip_tags("<a href='http://kvz.io'>Kevin van Zonneveld</a>", "<a>")

возвращает 3: "<a href='http://kvz.io'>Kevin van Zonneveld</a>"

Пример 4:

strip_tags('1 < 5 5 > 1')

возвращает 4: '1 < 5 5 > 1'

Пример 5:

strip_tags('1 <br/> 1')

возвращает 5: '1 1'

Пример 6:

strip_tags('1 <br/> 1', '<br>')

возвращает 6: '1 <br/> 1'

Пример 7:

strip_tags('1 <br/> 1', '<br><br/>')

возвращает 7: '1 <br/> 1'

1 голос
/ 08 апреля 2013

Вы можете попробовать это, вероятно, лучшее решение: http://phpjs.org/functions/strip_tags/

1 голос
/ 09 апреля 2011

UPDATE

Используйте следующее для удаления тегов при сохранении содержимого

$('#text').find('p').contents().unwrap();

Это уберет тег p, где p является дочерним элементом '#text'.

Проверьте рабочий пример на http://jsfiddle.net/YWCsH/

...