Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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 在HTML中为Ajax请求嵌入元素的数据库ID_Javascript_Html_Ajax - Fatal编程技术网

Javascript 在HTML中为Ajax请求嵌入元素的数据库ID

Javascript 在HTML中为Ajax请求嵌入元素的数据库ID,javascript,html,ajax,Javascript,Html,Ajax,有一个给定的代码: <div id="256"> <p>SOMELEMENT</p> <button class="edit">EDIT</button> <button class="delete">DELETE</button> </div> <div id="257"> <p>SOMELEMENT2</p> <button

有一个给定的代码:

<div id="256">
   <p>SOMELEMENT</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>
</div>
<div id="257">
   <p>SOMELEMENT2</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>
</div>
<script>
   $(".edit").click(function() { var id = $(this).parent().attr("id"); /* do some Ajax here, edit element in database with given id*/});
   $(".delete").click(function() { var id = $(this).parent().attr("id"); /* do some Ajax here, delete element in database with given id*/});
</script>

某些元素

编辑 删除 一些元素2

编辑 删除 $(“.edit”)。单击(function(){var id=$(this).parent().attr(“id”);/*在这里执行一些Ajax操作,使用给定的id在数据库中编辑元素*/); $(“.delete”)。单击(function(){var id=$(this.parent().attr(“id”);/*在这里执行一些Ajax,删除数据库中具有给定id的元素*/});
有一个包含一些元素的数据库,这些元素具有ID,我想通过Ajax对这些元素执行一些操作。我需要元素的数据库ID,以便可以对该元素执行一些Ajax请求。上面的解决方案是可行的,但也有一些缺陷——它依赖于HTML结构(例如,当我用其他元素包装按钮时,parent()将无法工作,因为HTML结构已更改)


如何以更好的方式将元素的数据库ID存储在HTML中,以便JavaScript能够获取它(例如Ajax请求)?

为什么不使用以下方法执行类似操作:


您可以使用数据属性。而不是让数据实体的id由html id属性表示。这些是表单数据的属性-*。 然后,您的代码可能如下所示:

<div data-elementid="256">
   <p>SOMELEMENT</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>
</div>
<div data-elementid="257">
   <p>SOMELEMENT2</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>

某些元素

编辑 删除 一些元素2

编辑 删除


$(“.edit”)。单击(函数(){var id=$(this.parent().data('elementid');});
$(.delete”)。单击(函数(){var id=$(this.parent().data('elementid');});
John Resig在这里写到:

另外,您可以在按钮元素上设置data属性,这样就不必遍历到parent()来获取id


如果您想更深入,请查看Angular.js、Ember.js或Backbone.js等js框架。其思想是DOM不应用于存储数据,而应仅用于表示数据。然后可以使用Javascript模型存储应用程序数据

虽然您已经有了一个(完全有效的)可接受的答案,但我想提供另一种解决问题的方法,它消除了必须将数据附加到每个按钮的负担,而不是依赖一个类,该类可用于获取数据附加到的实际项/记录/条目的句柄,由于我的HTML倾向于有这样一个类,因此我觉得这非常方便(我将使用注释列表作为示例):


某些元素

编辑 删除 一些元素2

编辑 删除 $(“.comment.edit”)。单击(函数(){var id=$(this).closest('.comment')。data('id');}); $(“.comment.delete”)。单击(函数(){var id=$(this).closest('.comment')。data('id');});

键是.closest()jQuery函数,它沿DOM树向上移动以查找表示注释项的“.comment”div。这意味着,只要在.comment DIV中保留.edit和.delete元素,就可以自由修改HTML结构,而不必担心JavaScript,也不必在多个位置添加data-*属性。

这并不能解决原来的问题,即如果按钮被包装在另一个DIV中,父元素发生了变化。在这种情况下,我只需将数据属性添加到处理事件的元素中,在本例中是按钮。
$(".edit").click(function() { 
  var id = $(this).data("id"); 
  /* do some Ajax here, edit element in database with given id*/
});
<div data-elementid="256">
   <p>SOMELEMENT</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>
</div>
<div data-elementid="257">
   <p>SOMELEMENT2</p>
   <button class="edit">EDIT</button>
   <button class="delete">DELETE</button>
    <script>
        $(".edit").click(function() { var id = $(this).parent().data('elementid'); });
        $(".delete").click(function() { var id = $(this).parent().data('elementid'); });
    </script>
<div class="comment" data-id="256">
    <p>SOMELEMENT</p>
    <button class="edit">EDIT</button>
    <button class="delete">DELETE</button>
</div>
<div class="comment" data-id="257">
    <p>SOMELEMENT2</p>
    <button class="edit">EDIT</button>
    <button class="delete">DELETE</button>
</div>

<script>
    $(".comment .edit"  ).click(function() { var id = $(this).closest('.comment').data('id'); });
    $(".comment .delete").click(function() { var id = $(this).closest('.comment').data('id'); });
</script>