Удаление комментариев и текстовых узлов из коллекции jQuery - PullRequest
4 голосов
/ 19 октября 2011
$html = $("<!-- comment --> <p>text</p>");

создает коллекцию jQuery следующим образом:

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

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

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

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

создает коллекцию jQuery, например, так:отказоустойчивый способ добраться до p, и только p, который работает, есть ли комментарий там или нет?

Ответы [ 4 ]

7 голосов
/ 19 октября 2011

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

$html = $("<!-- comment --> <p>text</p>").filter('*');
1 голос
/ 19 октября 2011
var p = $html.filter(function() { return this.nodeType === 1; });

jsFiddle .

0 голосов
/ 19 октября 2011

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

OR

$html = $("<!-- comment --> <p>text</p>");
$target = new Object();
for(key in $html){
    if(typeof $html[key] ===  'object' && $html[key].localName === 'p')
        $target = $html[key];
}
0 голосов
/ 19 октября 2011

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

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

var html = $('.text').html();
html = $.trim(html.replace(/<!--(.*?)-->/ig, ''));
alert(html);
...