Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 Id处理_Javascript_Jquery - Fatal编程技术网

JavaScript Id处理

JavaScript Id处理,javascript,jquery,Javascript,Jquery,我正在开发一个网站,允许用户通过内联“窗口”在同一浏览器窗口中打开相同内容的多个页面 由于内容可以重复多次id可以是相同的,因此我必须“处理”每个内容,以便区分这些页面 目前,我通过在加载时为脚本分配一个唯一的id来实现这一点,如下所示: var id_key; function load_page() { id_key++; load_script("test.js") //load javascript file } //test.js: $(function

我正在开发一个网站,允许用户通过内联“窗口”在同一浏览器窗口中打开相同内容的多个页面

由于内容可以重复多次id可以是相同的,因此我必须“处理”每个内容,以便区分这些页面

目前,我通过在加载时为脚本分配一个唯一的id来实现这一点,如下所示:

var id_key;

 function load_page() {
     id_key++;
     load_script("test.js") //load javascript file
 }
 //test.js:
 $(function () {
     var unique_id = id_key;
     //adds the `unique id ` to the end of all elements  with an id attribute set. ie `mycontainer` becomes `mycontainer_1`
     update_ids(unique_id);

     $("#mybtn_ " + unique_id).click(function () {
         //do stuff
     });
 }
这在大多数情况下都可以正常工作,但是如果多个页面加载过快,Id会被覆盖,从而导致混乱和错误


我想知道是否有一个更好的技术这样做。我听说过backbone.js,但我不确定这在这种情况下是否有用。

通过连接日期和随机数,您可以生成非常好的唯一ID:

new Date().getTime() + Math.random()
虽然这决不是完美的,但我认为在您的用例中它就足够了


正如Jack在评论中提到的,您可以将此id作为get参数传递给新窗口。我曾经用这种方法做过一个完整的类似操作系统的界面,它工作得完美无缺。

解决这类问题有几种通用方法:

  • iframe
    s中加载子页面。每个iframe都有自己的ID空间。所有帧中的脚本都可以通过所有帧进行对话

  • 不要使用任何ID。相反,给每个“窗口”一个ID,然后通过类和父子关系定位窗口中的元素。请注意,一个元素可以有多个类

    然后,您可以使用
    $(选择器,win)
    在特定窗口
    win
    上查找元素。窗口变为“”,这意味着jQuery将只搜索窗口的子级,而不搜索其他内容

  • 在脚本开始时,按ID定位所有重要元素,并将它们保存在JavaScript对象中。这样,无需使用jQuery选择器即可访问它们

    例如,您可以选择具有ID的任何内容,并将其保存在window元素中。完成此设置后,所有元素都可以通过
    $(win.data('id')


  • id_key=id_key++?只需
    id_key++
    将在那里实现这一点。很好的一点修复了这一点。您可以加载
    “test.js?id=“+id_key
    ,让脚本了解它是如何调用的,或者只加载脚本一次,如果我测试了.js?id,则有一个函数可以绘制整个接口(id作为参数)=“+id\u键脚本如何恢复该id,也不意味着它不会被缓存。您不能使用
    查找单击的元素,然后使用它吗?还是我遗漏了什么?我的问题不是id的“随机性”,而是它的处理。只使用数字1-100就可以了。但问题是,如果在另一个页面/窗口完成代码运行之前加载另一个页面/窗口,“id”本身可能会被覆盖。有趣的建议。我采用HTML5的方法来处理这些事情,所以我想避免使用iFrame,但是类的事情可以。唯一的问题是,这将使查找元素变得更加困难。另外,也不确定添加不存在的类是否好。关于第三种方法,从本质上讲,并不是克隆它们。可能表现不佳。关于第二个建议,我认为在处理id或win值方面,我仍然存在与现在相同的问题。我仍然需要以某种方式将该值添加到脚本文件中。您必须修改脚本文件以使用您的方法,而不是按ID查找元素。我的任何方法中都没有克隆。