Поиск абзацев только с

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я пытаюсь найти все теги p со встроенным стилем attrs style=»text-align: center;», которые содержат только amp;nbsp; и ничего больше. А затем удаляем весь p для каждого найденного.

Есть другие теги p с тем же attr, которые содержат больше, чем просто nbsp, которые я хочу сохранить, я просто застрял на поиске тех, в которых указан только пробел. Глупый редактор wordpress TinyMCE сводит меня с ума.

Это основа того, над чем я работал, делая это с помощью. просто выводит все теги text-align center p с выравниванием по центру.

 var p = $('.entry p[style="text-align: center;"]');
p.each(function() { 
  console.log(p);
});
  

Глупая маленькая штучка, я не хочу больше тратить время, пытаясь понять, что я делаю не так. Вот пример страницы, на которой есть материал, с которым я работаю.
http://www.drinkinginamerica.com/page/14 /

Спасибо

Ответ №1:

Вы можете сделать это с помощью remove() функции:

 $('.entry p').each(function() {
    var $p = $(this),
        txt = $p.html();
    if (txt=='amp;nbsp;') {
        $p.remove();   
    }
});
  

Смотрите http://jsfiddle.net/nrabinowitz/LJHyA / для рабочего примера. Это предполагает довольно строгий случай, когда единственной вещью в p теге является amp;nbsp; объект.


Слишком медленно — @mu побеждает.

Комментарии:

1. Вы не учли style фильтрацию атрибутов, но $(this).html() == 'amp;nbsp;' это главное.

2. это работает, спасибо. я собирался использовать метод remove (), но не смог заставить его выделить теги nbsp p. слишком старался сделать это в 1 строку

3. @mu — Наверное, я предполагал, что мы, вероятно, хотели удалить все p теги, которые только содержали amp;nbsp; , независимо от стиля, но, конечно, селектор можно настроить при необходимости.

Ответ №2:

Я думаю, вы хотите этого:

 $('.entry p[style="text-align: center;"]').each(function() {
    var $this = $(this);
    if($this.html().match(/^s*amp;nbsp;s*$/))
        $this.remove();
});
  

Это немного чувствительно к точному style атрибуту, но несколько смягчает то, как amp;nbsp; выполняется форматирование внутри абзацев.

Я думаю, что что-то более слабое могло бы послужить вам лучше:

 $('.entry p').each(function() {
    var $this = $(this);
    if($this.css('text-align') == 'center'
    amp;amp; $this.html().match(/^s*amp;nbsp;s*$/))
        $this.remove();
});
  

http://jsfiddle.net/ambiguous/nMKnR/