【问题标题】:Getting highest ID in Javascript在 Javascript 中获取最高 ID
【发布时间】:2011-08-08 16:32:29
【问题描述】:

我的 HTML 中的每个十进制 ID 都有不同的跨度:

<span id="1">Lorem Ipsum</span>
<span id="23">Lorem Ipsum</span>
<span id="6">Lorem Ipsum</span>

我想使用 javascript 获得最高 ID。在这种情况下,它应该返回 23。

我该怎么做?

谢谢。

【问题讨论】:

  • 这些id 属性无效。
  • @user422039 - 在 HTML 4 中,没有。在 HTML 5 中它们是。
  • @justkt, w3.org/TR/html401/types.html#type-name 而您的 HTML5 声明缺乏规范性参考:-P
  • @iser422039 - here's the spec。注意规则:1 个字符,在子树中唯一,没有空格字符。不再以字母开头了。
  • @justkt,没有正式的定义了。哦,等等,它不是说“正在进行中”吗?

标签: javascript


【解决方案1】:

ID 必须以字母开头。它们不能只是数字。

【讨论】:

  • 不是,它们“必须”以字母开头,例如 JS 变量。
  • @Sergey:在 HTML4 中,“必须”是正确的;尽管在技术上可以创建无效标记(并且某些浏览器能够猜测您可能的意图),但这并没有减少它的无效性。
【解决方案2】:

请注意 these rules 用于 HTML 4 的 DOM id(HTML 5 有 different rules)。如果更改为以字母开头,则可以在解析之前使用子字符串或正则表达式删除数字部分。下面的代码假定您的数字部分之前有一个字母的前缀(例如“s”),并且是 vanilla JS,不需要 jQuery。

// get all spans
var spans = document.getElementsByTagName("span");
var length = spans.length;
// variable for the highest one
var highest = 0;
// loop over to find the highest ID by looking at the property parsed as an int
for(var i = 0; i < length; i++) {
    var id= parseInt(spans[i].id.substring(1, spans[i].id.length), 10);
    if(id > highest) {
        highest = id;
    }
}
alert(highest);

see it in action

你也可以用 jQuery 来做:

var highest = 0;
$("span").each(function() {
    var id = parseInt(this.id.substring(1, this.id.length), 10);
    if(id > highest) {
        highest = id;
    }
});
alert(highest);

See it in action

【讨论】:

    【解决方案3】:
    var els = document.getElementsByTagName('span'),
        highest = 0,
        i,
        cur;
    
    for (i = 0; i < els.length; i++) {
        cur = parseInt(els[i].id, 10);
        if (els[i].id > highest) {
            highest = cur;
        }
    }
    

    highest 将包含最大值。

    但是请注意,在 HTML4 中,元素 ID 以非字母字符开头是非法的:

    ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。 (source)

    如果您使用的是 HTML5,这不是问题。而且,更重要的是,它可能无论如何都会起作用。

    【讨论】:

      【解决方案4】:

      ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。

      source

      我的解决方案是:

      var item = $('span').get(0);
      var max_id = parseInt($(item).attr('id'));
      $('span').each(function(){
         var curr_id = parseInt($(this).attr('id'));
         if (curr_id > max_id){
             max_id = curr_id;
             item = $(this);
         }
      });
      

      【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 2010-11-07
      相关资源
      最近更新 更多