【问题标题】:Javascript: rowIndex() function gives zero-indexed value in IE, but not in ChromeJavascript:rowIndex() 函数在 IE 中给出零索引值,但在 Chrome 中没有
【发布时间】:2017-06-27 23:02:44
【问题描述】:

我正在尝试使用以下代码行从表中提取 rowIndex 值:

var selected = document.getElementById("selected").rowIndex;

但是,我注意到某个值会根据我的浏览器类型而变化。在 Chrome 上,tbody 部分中第一行的值始终为1,而在 IE 中,它从0 开始。对于我的应用程序,我需要它从 0 开始。

我的表结构如下:

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Item</th>
            <th>Size</th>
        </tr>
    </thead>
    <tbody>
        <tr>
           <td>A32</td>
           <td>Book</td>
           <td>Small</td>
        </tr>
        <tr>
          <td>A34</td>
          <td>Car</td>
          <td>Large</td>
        </tr>
        <tr>
          <td>T83</td>
          <td>Computer</td>
          <td>Medium</td>
        </tr>
    </tbody>
</table>

我可以做些什么来解决这个问题,它是如何发生的?

【问题讨论】:

  • 对我来说都是从 0 开始的。
  • Chrome 可能会计算所有行,而不仅仅是 body 标签中的行
  • 确实 chrome 和 FF 将 thead 行计为一行,IE 可能是唯一不这样做的浏览器。您可以编辑表格本身或为其添加属性或其他任何东西吗?

标签: javascript html google-chrome internet-explorer


【解决方案1】:

正如 Musa 和 Huangism 在上述 cmets 中所解释的那样,问题在于 Chrome 会计算表中的所有行,包括标题行。为了解决这个问题,我编写了一个脚本来检测给定的浏览器类型,并包含/不包含 rowIndex 的偏移量。

function detectIE() {
    var ua = window.navigator.userAgent;


    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        // IE 10 or older => return version number
        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
    }

    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
        // IE 11 => return version number
        var rv = ua.indexOf('rv:');
        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
    }

    var edge = ua.indexOf('Edge/');
    if (edge > 0) {
        // Edge (IE 12+) => return version number
        return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

var offset = 0;
    if(detectIE())
        offset = 0;
    else
        offset = 1;

var selected = document.getElementById("selected").rowIndex - offset;

如果您需要修复,上述内容很方便,但请记住,用户代理字符串将来可能会更改。

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 2015-09-25
    • 2013-11-24
    • 2016-06-05
    • 1970-01-01
    • 2015-02-04
    • 2023-03-26
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多