Удаление комментариев и текстовых узлов из коллекции jQuery

$html = $("<!-- comment --> <p>text</p>");

создает коллекцию JQuery так

$( [the comment], [text node], p )

Как я могу получить доступ только к абзацу? .find("p") возвращает пустую коллекцию

И, для дополнительных очков,

$html = $("<p>text</p>");

создает коллекцию JQuery так

$( p )

Есть ли надежный способ добраться до p, и только p, который работает, есть ли комментарий или нет?

4 ответа

Решение

Самый простой способ с filter и универсальный селектор *, который соответствует всем элементам.

$html = $("<!-- comment --> <p>text</p>").filter('*');
var p = $html.filter(function() { return this.nodeType === 1; });

jsFiddle.

Один из способов - получить по индексу, как в $html = $("<!-- comment --> <p>text</p>"); Вы можете получить р тег с помощью $($html[2]),

ИЛИ ЖЕ

$html = $("<!-- comment --> <p>text</p>");
$target = new Object();
for(key in $html){
    if(typeof $html[key] ===  'object' && $html[key].localName === 'p')
        $target = $html[key];
}

Попробуйте это демо. Может быть, это не совсем то, как ты собираешься использовать это, но ты понял.

<div class="text">
    <!-- comment -->
    <p>text</p>
</div>

var html = $('.text').html();
html = $.trim(html.replace(/<!--(.*?)-->/ig, ''));
alert(html);
Другие вопросы по тегам