ОК, так что я попробовал кучу вещей, и я все еще не могу заставить работать оригинальный синтаксис, поэтому лучшее, что я могу придумать (это довольно хороший обходной путь, учитывая), - это расширение прототипа XMLListи добавьте метод filter ():
XMLList.prototype.function::filter = function(callback)
{
var output = new XMLList();
var length = input.length();
for(var i = 0; i < length; i++)
{
if(callback(input[i], i, input))
{
output += input[i];
}
}
return output;
}
Итак, со следующим XML ...
var xml = <root>
<person id="dave">Dave</person>
<person id="ian">Ian</person>
<person>John</person>
<group>
<person id="jane">Jane</person>
<person>Sarah</person>
</group>
</root>
Это довольно интуитивно понятно для захвата и фильтрации узлов:
// old
var nodes = xml..person.( hasOwnProperty('@id') );
// new
var nodes = xml..person.filter( function(node){ return node.hasOwnProperty('@id'); } );
<person id="dave">Dave</person>
<person id="ian">Ian</person>
<person id="jane">Jane</person>
Если кто-то может исправить меня, я был бы очень рад, если нет, я просто хотел бы знать, почему моя оригинальная фильтрация просто не сработала.
Дейв