我的应用程序中有以下代码。它应该从JQuery集合构建一个逗号分隔的字符串。从一些xml中检索该集合。我使用JQuery each()进行迭代。这是我一直使用的标准代码。我首先声明并定义结果变量(patientConditions)并将其设置为空白。在函数中,我将找到的字符串与逗号一起添加到结果变量中。如果有结果,我不会被尾随的逗号所困扰。问题是没有结果我的each()中的第二行正在运行 - 它们可能都是。循环完成后(xml中没有匹配的元素),结果的值为','。它应该是空白的。我认为这与封闭或吊装有关,但我无法弄清楚它是如何发生的。我已经破解了这种情况的解决方案,但我更担心我的js知识中的漏洞:(
var patientConditions = '';
$xml.find('patient>prescription>conditions').each(function() {
var conditionName = $(this).find('condition>name');
patientConditions += conditionName.text() + ',';
});
答案 0 :(得分:1)
每当使用jQuery对象查找不存在的节点时,在这种情况下$(this).find('condition>name')
。 jQuery对象仍然存在,它只是不包含与节点的关联。这将允许您在此对象上运行所有jQuery函数,尽管它没有任何引用。这就是conditionName.text()
返回空字符串的原因,尽管没有节点存在。解决方案,在执行任何操作之前检查节点是否存在。
var patientConditions = '';
$xml.find('patient>prescription>conditions').each(function() {
var conditionName = $(this).find('condition>name');
if (conditionName.length > 0) {
patientConditions += conditionName.text() + ',';
} else {
// Do something if node doesnt exist
}
});
答案 1 :(得分:1)
根据我的理解,patient>prescription>conditions
匹配,但condition>name
不匹配,在这种情况下,$(this).find('condition>name')
将返回零elemet集。然后该集合上的.text()
将返回一个空字符串
$xml.find('patient>prescription>conditions').each(function() {
var conditionName = $(this).find('condition>name');
if(conditionName.length){
patientConditions += conditionName.text() + ',';
}
});