Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中Dom对象作为值对象的抽象问题_Javascript_Jquery - Fatal编程技术网

Javascript中Dom对象作为值对象的抽象问题

Javascript中Dom对象作为值对象的抽象问题,javascript,jquery,Javascript,Jquery,我有一个图像库,其中库中的每个项目都有一个唯一的ID,我使用它将其绑定到后端,以便运行DB操作等。我使用数据属性在每个图像的父div上保存“imageid”,例如:data imageid=168 图像库项目有很多嵌套的div,因此在滚动/单击时,我发现自己正在执行以下许多操作以运行操作: $(this).parent().parent().attr('data-imageid'); 感觉它不是一个干净的解决方案,也不是最好的性能。其他人是如何处理这件事的?最好的解决方案是什么?无论解决方案是

我有一个图像库,其中库中的每个项目都有一个唯一的ID,我使用它将其绑定到后端,以便运行DB操作等。我使用数据属性在每个图像的父div上保存“imageid”,例如:data imageid=168

图像库项目有很多嵌套的div,因此在滚动/单击时,我发现自己正在执行以下许多操作以运行操作:

$(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函数相比,它的速度非常慢。