Необходимо извлечь конкретный текстовый узел, чтобы скрыть или удалить его с помощью JQuery - PullRequest
4 голосов
/ 27 июня 2011

У меня есть блог на WordPress, который я контролирую, чтобы редактировать и форматировать содержимое RSS-канала. У меня есть другой веб-сайт, на котором я хочу отобразить выдержки из постов из моего блога, а затем сделать ссылку на блог непосредственно для полного поста. Канал, который я получаю, в порядке, за исключением того, что у меня отображается нежелательный текст без тегов, и поскольку в нем нет тегов HTML, я не могу использовать CSS, чтобы его скрыть. (Я ценю, что мне также нужно отладить фид и, возможно, содержимое блога, поскольку код фида, который я использую, не выдает эту ошибку ни на одном другом блоге, который я настроил, но это отдельная проблема).

Это формат HTML, который генерируется из канала:

        <li class="rss-item">
      <a class="rss-item" href="http://myblog.com/post-title">Post Title</a>
      <br>
      http://myblog.com/post-title/Post Title <!-- this line I want to remove -->
      <div class="thumbnail">
        <a href="#">
        <img src="thumbnail.jpg">
        </a>
      </div>
      <div class="excerpt">Excerpt text</div>
      <a href="http://myblog.com/post-title">Continue reading...</a>
    </li>

Я хочу извлечь текстовый узел для непомеченного текста (который отображает URL и заголовок публикации на странице) и либо удалить его с помощью JQuery, либо добавить некоторые теги span и скрыть его с помощью CSS. Мои знания JQuery очень ограничены, и я безуспешно пытался редактировать различные фрагменты кода, которые я нашел в Интернете. Кто-нибудь может помочь?

1 Ответ

5 голосов
/ 27 июня 2011
var tn = $('a.rss-item[href="http://myblog.com/post-title"] + br')[0].nextSibling;

tn.parentNode.removeChild( tn );

Пример: http://jsfiddle.net/BZ5Tx/

Находит элемент br, у которого предыдущий брат имеет элемент a с классом rss-item и href http://myblog.com/post-title.

Затем он извлекает элемент DOM, получает nextSibling, который должен быть текстовым узлом, и сохраняет его в переменной.

Затем из текстового узла получаем parentNode и используйте removeChild для удаления текстового узла.


Если это повторяющийся шаблон с разными URL-адресами, вы можете попробовать вместо этого этот селектор:

$('a.rss-item[href] + br');

...и используйте цикл:

$('a.rss-item[href] + br').each(function() {

    var tn = this.nextSibling;

    tn.parentNode.removeChild( tn );

});

Как отмечает @ Anurag , будет хорошей идеей сделать цикл в каждом месте, удаляя текстовые узлы до тех пор, пока нетекстовый узелдостигнут, на случай, если есть смежные текстовые узлы.

$('a.rss-item[href] + br').each(function() {

    var tn = this;

    while( tn = tn.nextSibling  ) {
        if( tn.nodeType === 3 ) {
            tn.parentNode.removeChild( tn );
        }
    }

});
...