在 loadComplete 中从网格访问 html-元素

Access html-element from grid in loadComplete

所以我想要完成的是当网格完全加载时,我循环遍历包含复选框的特定列。根据复选框的值,我应该能够禁用它。 问题是我无法访问那里的 html 元素。我做错了什么或忽略了什么? 我尝试过的:

loadComplete: function() {
    // Fetch all the ID's of the rows   
    var rows = $("#table").getDataIDs();
    // Loop over the rows
    if(rows.length != 0){
        for(i=0; i < rows.length; i++) {
            // Get the data so we test on a certain condition
            var row = $("#table").jqGrid("getRowData", rows[i]);   
            if (row.gridCheckbox == 1) {
              //disable the element
              row.prop("disabled", "disabled");
            }
        }
    }
}

重要的是要了解更改页面上的 one 元素在大多数情况下会跟随网络浏览器 reflow:验证某些 属性(位置例如)需要在 页面上的所有其他元素 中进行更改。如果您在循环中进行更改,那么您的 JavaScript 代码可能会非常慢。

因此强烈建议减少 DOM 的更改次数。特别是为了减少更改次数,jqGrid 提供了 rowattrcellattr 和自定义格式化程序。例如,如果您需要在某些行上设置 disabled 属性,那么您应该 现在 loadComplete 中执行此操作,但要使用 rowattr 来通知jqGrid 应该在某些行上设置一些附加属性(disabled="disabled")。 jqGrid 首先收集整个 table 主体的字符串表示,并使用 one 赋值 innerHTML 将网格的整个主体填充为一个 DOM 手术。它从本质上提高了性能。请参阅 the old answer 中的代码示例。