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