Как выбрать узлы, у которых нет родительского узла? - PullRequest
0 голосов
/ 24 ноября 2010

Я хотел бы взять строку примерно так:

<div>my div 1</div><p>para1</p><p>para2</p><p>para3</p><div>my div 2</div>

и затем удалить все <p> узлы.

У меня возникли трудности с этим, потому что я думаю, что строкавыше не имеет контекста, и JQuery нужен контекст для работы с селекторами:

var p = "<div>my div 1</div><p>para1</p><p>para2</p><p>para3</p><div>my div 2</div>"
var pj = $(p)

Когда я запускаю приведенный ниже оператор в FireBug, я не получаю возвращаемых элементов.Это потому, что переменная 'p' должна быть заключена в другой div, чтобы она работала?Я хочу быть в состоянии удалить элементы из строки, даже если она не является частью DOM.

$("p",pj)

1 Ответ

2 голосов
/ 24 ноября 2010

Вам нужно .filter() для поиска элементов на том же уровне, например:

$(pj).filter("p");

$("p",pj) переводится как $(pj).find("p") под обложками, поэтому ничего не находит, потому что элементы <p> являются потомками pj, они члены. Для ясности, jQuery не нуждается в том, чтобы они содержались в чем-либо, это проблема «потомок» против «не потомок».


Альтернативный подход - добавить их во временный фрагмент и всегда использовать .find(), например:

var p = "<div>my div 1</div><p>para1</p><p>para2</p><p>para3</p><div>my div 2</div>"
var pj = $('<div />').html(p);

Тогда $("p",pj) будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...