Javascript中Dom对象作为值对象的抽象问题
我有一个图像库,其中库中的每个项目都有一个唯一的ID,我使用它将其绑定到后端,以便运行DB操作等。我使用数据属性在每个图像的父div上保存“imageid”,例如:data imageid=168 图像库项目有很多嵌套的div,因此在滚动/单击时,我发现自己正在执行以下许多操作以运行操作:Javascript中Dom对象作为值对象的抽象问题,javascript,jquery,Javascript,Jquery,我有一个图像库,其中库中的每个项目都有一个唯一的ID,我使用它将其绑定到后端,以便运行DB操作等。我使用数据属性在每个图像的父div上保存“imageid”,例如:data imageid=168 图像库项目有很多嵌套的div,因此在滚动/单击时,我发现自己正在执行以下许多操作以运行操作: $(this).parent().parent().attr('data-imageid'); 感觉它不是一个干净的解决方案,也不是最好的性能。其他人是如何处理这件事的?最好的解决方案是什么?无论解决方案是
$(this).parent().parent().attr('data-imageid');
感觉它不是一个干净的解决方案,也不是最好的性能。其他人是如何处理这件事的?最好的解决方案是什么?无论解决方案是什么,这都必须是一个每天都要解决的问题
编辑:我意识到我的主题是模糊的,但它进一步解释了我对这个问题的看法。这听起来很可疑,好像你有一个问题。在任何情况下,您都可以使用过滤器来减少代码的冗长。e、 g
$(this).parents(".classOfDivContainingData").attr('data-imageid');
或者,您可以在初始加载时循环父div,并将数据属性复制到示例中的this。有什么原因不能在此处首先设置属性吗?您可以指定要升级的条件,因此,如果您想升级到最近的div或li或其他类型,请使用jQuery的.closest或简单的upTo函数:
function upTo(el, tagName) {
tagName = tagName.toLowerCase();
var el;
do {
el = el.parentNode;
if (el && el.tagName && el.tagName.toLowerCase() == tagName) {
return el;
}
} while (el)
}
你可以试试这个
$(this).parents("[data-imageid]:first");
我建议您对元素使用其他属性:
<div data-imageid="367">
<div>
<div data-parent-imageid="367">
</div>
</div>
</div>
因此,您可以只知道触发事件的元素来执行操作。使用此解决方案,您不必关心元素的结构,可以在DOM树中自由移动它们,性能也会得到提高 它的效率将大大提高。parentNode.parentNode.getAttribute'data-imageid';。有没有理由你不把数据元素放在你真正需要它的地方——不管是放在你唯一的地方,还是放在parent.parent之外。@friend00有趣的是,在我设计这个应用程序的时候,我不得不移动它两次,以使它直接放在我正在交互的元素上。现在它需要在两个地方。希望有更好的办法。我更愿意将DOM元素想象成一个类,其中所有子元素都可以随时访问该类的“id”。我可能只是把事情复杂化了。。。或者使用一些模型实现?这正是parents[selector]的作用,看起来最接近可能是最好的选择@captainill-如果你将它与更新的plan JS函数相比,它的速度非常慢。