JQuery xml 每个都没有元素

JQuery xml each fires without element

我正面临这种奇怪的 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);
        });
    }
}

我是不是遗漏了什么明显的东西?

编辑:抱歉,我确实漏掉了一个愚蠢的错误。 它应该是这样的:

function traverse(xml) {
    $('ids', xml).each(function (index) {
        var self = $(this);
        $('id', self).each(function (index) {
            var id = $(this).text();
            doSomething(id);
        });
    });
}

您似乎假设回调应该只针对 非空 id 标签触发。

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

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

您正在检查 xml 是否为 null,但是 id 的存在并不能使它如此,工作代码

fiddle : https://jsfiddle.net/3ksvy65p/

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);
        });
    }
}