Удаление комментариев и текстовых узлов из коллекции 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; });
Один из способов - получить по индексу, как в $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);