Javascript 如何克隆经过筛选的jQuery对象?

Javascript 如何克隆经过筛选的jQuery对象?,javascript,jquery,Javascript,Jquery,我使用$XML=$(xmldoc)将XML文档加载到jQuery。然后我通过$xml.filter('id=“something”')对其进行过滤。在过滤的xml上使用.index()时,jQuery返回原始列表中的索引,而不是过滤列表中的索引 示例: <xmlroot> <xmlnode id="1" color="blue" /> <xmlnode id="2" color="orange" /> <xmlnode id="3" colo

我使用
$XML=$(xmldoc)
将XML文档加载到jQuery。然后我通过
$xml.filter('id=“something”')
对其进行过滤。在过滤的xml上使用
.index()
时,jQuery返回原始列表中的索引,而不是过滤列表中的索引

示例:

<xmlroot>
  <xmlnode id="1" color="blue" />
  <xmlnode id="2" color="orange" />
  <xmlnode id="3" color="blue" />
  <xmlnode id="4" color="orange" />
  <xmlnode id="5" color="blue" />
</xmlroot>

    vObject = $xml.filter('[color="orange"]'); //vObject should just receive the xmlnodes 2 and 4
    vResult = vObject.filter('[id="4"]').index();

vObject=$xml.filter('[color=“orange”]')//vObject应该只接收xmlNode2和4
vResult=vObject.filter('[id=“4”]').index();
vResult始终为3,但应为1

我知道jQuery的这种行为是出于设计,但我需要一种解决方案,用过滤后的xml(而不是所有的xml)填充VoObject。我已经试了一整晚了,我没有主意了

如果这里的专家能帮忙,我会很高兴的。
谢谢

如果要获取jQuery集合中某个元素的索引,应将该元素传递给
index
方法:

var vResult = vObject.index(vObject.filter('[id="4"]')); // 1    
           // vObject.index(vObject.filter('[id="2"]')); // 0
           // vObject.index(vObject.filter('[id="3"]')); // -1

我没有得到与您描述的相同的结果。当我运行上面列出的相同代码时,我得到vResult=0<代码>vObject.filter('[id=“4”]')。长度为1.5 mm。此行:vObject.filter('[id=“4”]').index();正在创建新的筛选对象集,但您没有使用它。您正在获取现有未筛选集的索引。@SteveWellens行
vObject.filter('[id=“4”]”)。index()
返回一个数字而不是一个对象,
vObject
是一个包含2个元素的jQuery对象,
[id=“4”]
是新集合中的第二个元素。您是我今天的英雄:-)谢谢!!现在我可以睡觉了。。。老实说,我不知道为什么它会起作用,但它确实。。。我想我明白了:在我最初的问题中,xml被过滤了两次:一次是在使用“橙色”过滤器将其分配给vObject之前,一次是在使用“id=4”过滤器分配之后。我认为当集合被分配给一个新对象时,第一个过滤器将被永久应用,但事实并非如此。似乎在幕后,jQuery跟踪所有选择器,只引用原始未筛选集合的元素>>这与编写
vObject=$(“xmlnode”).filter('[color=“orange”]')。filter('[id=“4”]')。index()
>显然会在任何筛选器之前返回索引位置。继续。。。我需要获取vObject(应用第一个过滤器的地方),并将我正在搜索的元素作为参数>>containerterm.index(searchterm)>>传递,该函数与JS.indexOf()完全相同,只返回在containerterm中找到searchterm的位置。棘手的部分是,没有参数的.index()被记录为返回containerterm中相对于其同级的第一个元素>>我以为我会在第一个筛选器之后找到同级,但我在任何筛选之前找到了所有同级,因为jQuery的引擎盖下选择器串联。