Фильтрация в E4X - PullRequest
       24

Фильтрация в E4X

1 голос
/ 25 мая 2010

Это простой вопрос. В настоящее время я использую Mozilla's Rhino для разработки небольшого веб-приложения. В качестве одного шага мне нужно получить веб-страницу и отфильтровать все ее узлы. Для этого я использую E4X. Я думал, что смогу сделать это так:

var pnodes = doc..*(p);

Но это приводит к ошибке. Как это сделано правильно?

(Кстати: это всего лишь шаг для повышения производительности. Код уже хорошо работает, он немного медленный.)

1 Ответ

2 голосов
/ 25 мая 2010

Вы должны быть в состоянии использовать следующее:

doc..*.(name() == "p")

Обратите внимание, что это является ошибкой в реализациях Rhino и SpiderMonkey, где выражение фильтра name() == "p" не имеет правильной области видимости текущего узла, поэтому ни один из методов XML или XMLList определены.

<ч />

Другим работающим решением является поиск всех p узлов в документе и накопление родительского элемента каждого в массиве.

var elements = [];

for each (var p in doc..p) {
    var parent = p.parent();
    if(elements.indexOf(parent) === -1)
        elements.push(parent);
}
...