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