我正在对DOM元素进行一些测试,测试的结果是元素后代之一。例如:
<div id="myelement" class="some-class">
<div class="some-child-class"></div>
<div class="some-other-child-class">
<div class="grandchild-class"></div>
<div class="another-grandchild"></div>*
</div>
</div>
让我们假设:
test(document.getElementById('myelement'));
将返回用星号标记的元素
现在我的问题是:测试程序很重,资源消耗。我不想在不需要时运行它。有时,我克隆一个已经进行了测试的元素(含义 - 我知道测试的结果(,但是由于我获得了对象参考,因此我无法使用它来访问克隆元素上的相关孩子。
是否有任何有效的方法可以以某种方式"保存"从父元素到特定后代元素的相对路径,然后将其"应用"在另一个元素上?
,因此您可以为每个元素分配唯一的ID并在元素ID处的对象中缓存测试结果。但是,我不知道这是否有用。实现示例:
var test=function(el){
return this[el.id] || (this[el.id]=advancedtesting(el));
}.bind({});
所以您可以做:
test(document.getElementById('myelement'));//caches
test(document.getElementById('myelement'));//returns the cached
您可以使用jQuery。
他们使用的选择器可以采用" nth-child"或" type"的形式(请参阅此处的文档(。
做什么是从您从您开始的相对位置靶向子元素。在您的情况下,如果您想从第一个元素开始,然后转到可以做的明星元素:
$('#myelement').find('div:nth-child(2) > div:nth-child(2)')
这样做的是,它将#MyElement作为您将开始搜索的基础,之后它归结为第二个是DIV的子元素,然后再次进入该DIV的第二个子元素。您可以用不同的基础重复使用该选择器。