JQuery xml 每个在没有元素的情况下触发



我正面临着这种奇怪的JQuery行为。给定一个 xml 字符串,其 id 列表为空,每个循环仍然会触发:

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 是否为空,但是 ids 的存在并不能使它如此,工作代码

小提琴 : 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);
        });
    }
}

相关内容

最新更新