0

我的应用程序中有以下代码。它应该从 JQuery 集合中构建一个逗号分隔的字符串。该集合是从一些 xml 中检索的。我使用 JQuery each() 进行迭代。这是我一直使用的标准代码。我首先声明并定义结果变量(patientConditions)并将其设置为空白。在函数中,我将找到的字符串与逗号一起添加到结果变量中。如果有结果,我不会被尾随的逗号所困扰。问题是我的 each() 中的第二行没有结果正在运行——它们可能都在运行。循环完成后(xml 中没有匹配的元素),结果的值为“,”。它应该是空白的。我认为这与关闭或提升有关,但我无法弄清楚它是如何发生的。

var patientConditions = '';

$xml.find('patient>prescription>conditions').each(function() {
    var conditionName = $(this).find('condition>name');
    patientConditions += conditionName.text() + ',';
});
4

2 回答 2

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
    }
});
于 2013-09-20T11:46:30.103 回答
1

据我所知,有一个匹配 for patient>prescription>conditions,但不是 for condition>name,在这种情况下$(this).find('condition>name')将返回一个零元素集。然后.text()在该集合上将返回一个空字符串

$xml.find('patient>prescription>conditions').each(function() {
    var conditionName = $(this).find('condition>name');
    if(conditionName.length){
        patientConditions += conditionName.text() + ',';
    }
});
于 2013-09-20T11:46:42.540 回答