【问题标题】:Assigning ids to existing div using jquery使用 jquery 为现有 div 分配 id
【发布时间】:2014-08-19 19:32:13
【问题描述】:

我试图在页面上为我的 div 分配 id,这些 div 不是动态创建的,而是曾经写在页面上的,我需要为我页面上存在的那些 div 分配随机 id。 尝试了很多东西,但无法获得解决方案。在 html 页面上,div 存在于名为 demo 的类中,并且我分配了 id=mydiv 的 div。然后调用脚本并将 div id 更改为 mydiv 中的随机数。我无法将 +1 添加到下一个 div。 尝试了如下所示的 jquery 遍历 nextall() 但它没有将 +1 添加到新的 div ..

function handledivIds() {
    var e = $(".demo #mydiv");
    var t = randomNumber();
    var n = "div-",t;
    e.attr("id", n);    
    e.nextall().attr("id", n+1)
    }

function randomNumber() {
    return '' + new Date().getTime();
}

【问题讨论】:

  • 以及随机数()生成的独特性或任何变化
  • 感谢很多人,每个人都做得很好

标签: javascript jquery html dom


【解决方案1】:

尝试更改此设置

var e = $(".demo #mydiv");

到这里

var e = $(".demo div");

ID 仅适用于一个元素,因此 #myDiv 只会返回 div 元素之一...永远。

还结合 Jai 的回答。

【讨论】:

    【解决方案2】:

    Demo

    • n+1 不适用于字符串,所有下一个 divs 将获得与 .nextAll() 相同的 ID。
    • 也可以使用+ - var n = "div-"+t; 连接
    • 使用.each() 迭代div 元素。

    试试这个,

    function handledivIds() {
        var e = $(".demo div");
        var t = randomNumber();
    
        e.each(function (index) {
           $(this).attr("id", "div-" + (t + index))
        });
    }
    
    function randomNumber() {
        return '' + new Date().getTime();
    }
    

    【讨论】:

    • @user3787062,Jai 是第一个回答并指出错误的人。你应该接受他的回答。问题主要在于串联。
    【解决方案3】:

    改变这个:

    var n = "div-",t;
    

    到这里:

    var n = "div-";
    

    您可能想在此处连接字符串,并在您的nextAll() 中将1 附加到该字符串。


    或者您可以将您的功能更新为:

    function handledivIds() {
        $(".demo div").each(function(i, it){
            $(this).attr('id', "div-"+$(this).index()); // assigns unique ids per div
        });
    }
    

    【讨论】:

    • 我如何分配第一个;
    • 然后var n = "div-"; 改变这个。
    【解决方案4】:

    首先 - 使用日期不是随机的。它将提供可预测的增加值。如果你需要一些真正随机的东西,你最好在服务器端分配一个实际的随机数生成器。如果您可以忍受伪随机数,请使用Math.random 而不是时间。为了保证唯一性,您可以同时使用时间和随机数。包含时间,因为它是单调递增的,将保证唯一值,而伪随机数将赋予它随机质量。如果您需要真正的随机,请在服务器端使用加密性强的随机数生成器。

    其次,您的原始 div 不能都具有相同的起始 id。最好给他们一个服务器端的类,然后使用该类来识别它们。

     <div class="needs-random-id"></div>
    

    最后,nextAll 将相同的属性应用于所有匹配的元素。你可能想使用each

      var max = 9007199254740990;
      var min = 1;
      $('div.needs-random-id').each(function() {
          var time = new Date().getTime();
          var idValue = 'div-' 
                           + time + '-' 
                           + Math.floor(Math.random() * max) + min;
          $(this).attr('id', idValue);
      });
    

    【讨论】:

    • @user3787062 - 需要一些工作来确保它们是唯一的 - 它们是随机的,所以你不能保证。一种可能的解决方案是将当前时间与一个随机数连接起来,形成一个唯一的复合 ID。我会更新的。不过,同样,它们只是伪随机的,而不是真正的随机。如果您需要真正的随机,请在服务器端使用强大的加密随机数生成器。
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多