JQuery each() 函数代码即使在集合中没有元素时也在运行
JQuery each() function code is running even when there are no elements in the collection
我的应用程序中有以下代码。它应该从 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() + ',';
});
据我所知,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() + ',';
}
});
每当使用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
}
});
相关文章:
- jQuery在元素的上下文中运行函数
- 在运行时创建元素时移到一边时出错
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 对动态创建的元素运行jQuery.ech()
- 根据特定选项卡中的元素运行 .each()
- 为特定的 DOM 元素运行 setTimeout()
- 如何分别为每个元素运行jQuery幻灯片功能
- 如何获取html元素运行时代码以生成通用副本?就像复制文本框中输入文本一样
- 对具有相同类的多个元素运行一个jQuery函数
- JQuery函数为每个元素运行多次
- Canvas元素运行不正常
- 检测是否插入了元素,并根据元素运行函数
- 使用jQuery对选择器的所有元素运行函数
- 不能对单个元素运行验证
- 对同一个类的每个元素运行一个jQuery,返回undefined
- jQuery触发事件的id的元素运行处理程序定义的类在包含的小枝模板
- jQuery插件,使一个元素环绕另一个元素运行
- 如何使用javascript从一个select元素运行多个函数
- 分别为每个元素运行 jQuery 函数
- 为每个元素运行一个函数