jqueryxml每个都不使用元素激发

jqueryxml每个都不使用元素激发,jquery,xml,each,Jquery,Xml,Each,我面临着这种奇怪的JQuery行为。给定一个包含空ID列表的xml字符串,each循环仍会激发: var xmltext = '<xml><ids></ids></xml>'; var xmlDoc = $.parseXML(xmltext); var xml = $(xmlDoc); traverse(xml); function traverse(xml) { if (xml != null) { $('ids', x

我面临着这种奇怪的JQuery行为。给定一个包含空ID列表的xml字符串,each循环仍会激发:

var xmltext = '<xml><ids></ids></xml>';
var xmlDoc = $.parseXML(xmltext);
var xml = $(xmlDoc);
traverse(xml);

function traverse(xml) {
    if (xml != null) {
        $('ids', xml).each(function (index) {
            // why do I get here??
            var id = $('id', this).first().text();  // id is ""!
            doSomething(id);
        });
    }
}

您似乎认为回调应该只针对非空的
id
标记启动

事实并非如此;jQuery选择器选择
id
标记。你没有规定他们必须是非空的。如果这是你的意思,那么:

$('ids:not(:empty)', xml).each(...

您似乎认为回调应该只针对非空的
id
标记启动

事实并非如此;jQuery选择器选择
id
标记。你没有规定他们必须是非空的。如果这是你的意思,那么:

$('ids:not(:empty)', xml).each(...

您正在检查xml是否为空,但是ID的存在并不能使其为空,这是正常的代码

小提琴:


您正在检查xml是否为空,但是ID的存在并不能使其为空,这是正常的代码

小提琴:


如果标签存在,
将运行每个
。。。即使只有一个。你有这样一个标签,但它没有。如果它是
1
,但根本就没有这样的
id
元素,所以我希望没有
每个
。但是
每个
都是
$('id')
而不是
$('id')
,而且肯定有一个
标记,我知道我走错了路,你完全正确,对不起,我不知道。如果标签存在,
每个
都将运行。。。即使只有一个。你有这样一个标签,但它没有。如果它是
1
,但根本就没有这样的
id
元素,所以我希望没有
每个
。但是
每个
都是
$('id')
而不是
$('id')
,而且肯定有一个
标记,我知道我走错了路,你完全正确,抱歉我的无知。请注意,
:empty
不会过滤掉标记yes中的任何空白元素。我假设元素,如他的源XML所示,确实是空的。如果您认为答案已经回答了您的问题,请接受答案。请注意,
:empty
不会过滤掉标记yes中的任何空白元素。我假设元素是空的,如他的源XML中所示。如果您认为有一个元素回答了您的问题,请接受答案。确保XML不是空的,但“ID”列表应该是空的,因此我不希望
每个
都在空对象(或数组)上触发。事实上,我在这里的其他地方读到了不应该这样做的消息(我仍然觉得这毫无意义)。但是谢谢你的回答,所以我现在必须到处检查这样的空列表:-(当然xml不是空的,但是“ID”列表应该是空的,所以我没想到
每个
都会在一个空对象(或数组)上触发。实际上我在这里的其他地方读到它不应该触发(这对我来说仍然没有意义).但是谢谢你的回答,所以我现在必须到处检查这些空名单:-(
var xmlDoc = $.parseXML(xmltext);
var xml = $(xmlDoc);
traverse(xml);

function traverse(xml) {
    if ($('ids').length != 0) {
        $('ids', xml).each(function (index) {
        alert();
            // why do I get here??
            var id = $('id', this).first().text();  // id is ""!
            doSomething(id);
        });
    }
}