我正在编写自己的 jQuery 插件,其中引用了一些现有节点,并创建了一些在 DOM 树中不存在的新 jQ 节点(它们没有附加)。我正在使用该.add()
方法将每个元素添加到新集合中。
发生的情况是,这个集合的顺序看起来很奇怪(我在那里找不到任何逻辑模式)。文档中的以下注释可能是原因:
从 jQuery 1.4 开始,来自 .add() 的结果将始终按文档顺序返回(而不是简单的串联)。
考虑以下示例。
HTML
<body>
<a id="existing1"></a><a id="existing2"></a>
</body>
JS
<script type="text/javascript">
function addToColl(selector) {
coll = coll.add(selector);
var n = $(selector).get(0).id.match(/\d+/)[0];
for (var i = 0; i < 4; i++) {
var a = $('<a>',{id:'virtual'+n+'_'+i});
coll = coll.add(a);
}
}
$(document).ready(function() {
coll = $();
addToColl('#existing1');
// uncomment the following to see what's happening
//addToColl('#existing2');
$.each(coll,function(idx,elm) {
console.log(elm.id);
});
});
</script>
输出:
现有
1 虚拟 1_0虚拟 1_1 虚拟
1_2
虚拟
1_3
当您取消注释注释函数调用它输出
现有
1 虚拟1_3 虚拟 1_2 虚拟 1_1 虚拟 1_0 现有
2 虚拟 2_0虚拟 2_1 虚拟 2_2 虚拟 2_3
应该怎么做才能避免这种混乱?
------ [编辑] ------
由于add()
函数的意外行为,我最终使用原生 Javascript 数组来收集元素(即使用push()
方法)。稍后,当我收集完元素后,我会将其转换为 jQuery 集合。