Селектор простого текста в jQuery - PullRequest
2 голосов
/ 05 октября 2009

Я хотел бы оставить первые <a> и <span>, но удалите остальные в следующем:

<div>
    <a href="http://aerospace.com">Aerospace</a> and 
    <a href="http://aviation.com">Aviation</a>
    <span class="blah">(15)</span>
</div>

Я обнаружил, что не существует очевидного совпадения с простым текстом and. Я пытаюсь использовать nextAll () с фильтром:

$("a:contains('Aerospace')").each(function() {
    $(this).nextAll().filter(":not(span)").empty();
});

Но текст and там оставлен.

Возможно ли сопоставить текст в jQuery? Есть ли такая вещь, как текстовый селектор, чтобы я мог использовать что-то вроде filter (":isText()")?

Ответы [ 2 ]

2 голосов
/ 05 октября 2009
$("a:contains('Aerospace')").parent().contents().each(function() {
    if ( this.nodeType == 3 ) {
        var text = this.textContent? this.textContent: this.innerText;
        text = $.trim( text );
        if ( text.length ) {
            alert( text );
        }
    }
});

Вне моей головы что-то подобное должно работать, вы спускаетесь вверх к родителю и оперируете всем содержимым, не только узлами element, которые имеют nodeType из 1, но включая текстовые узлы, которые nodeType из 3.

Дайте мне знать, если это не сработает.

0 голосов
/ 05 октября 2009

Как насчет копирования span, затем удаления всего из div, а затем возврата span обратно?

$("a:contains('Aerospace')").each(function()
{
    var span = $(this).parent().children("span").clone();
    $(this).parent().empty().append(span);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...