【问题标题】:Chrome Extension jQuery tablesorter overrides tab content existing tablesorter JSChrome 扩展 jQuery 表格排序器覆盖标签内容现有的表格排序器 JS
【发布时间】:2011-08-15 10:40:10
【问题描述】:

我现在正在做一个 Chrome 扩展。 原因,这个扩展会修改一个TAB表的内容,然后需要求助。

经过研究,发现jQuery tablesorter并没有对本地扩展脚本更新的Modified表进行排序。

我可以执行 $('table').trigger('update') 然后使用 tablesorter 重建表 IF 我在 TAB 内容脚本中执行此操作。

但事实是,我的脚本处于隔离环境中,无法访问内容脚本变量或函数或对象。

如果我在扩展脚本中重建表格排序器,表格将响应两次,这很愚蠢。

我能做些什么来解决这个问题。谢谢。梅森。


@Darin,我试过你的观点
它不起作用。

$("#xftw").after($("#pio").clone(0, 0));
$("#pio").eq(0).empty();


$("#pio").tablesorter({
    headers: {
        0: {
            sorter: false
        },
        2: {
            sorter: false
        },
        6: {
            sorter: "digit"
        },
        10: {
            sorter: false
        }
    },
    sortInitialOrder: "desc",
    sortList:[[7,1]],
    textExtraction: function (node) {
        if ($(node).attr("extraction") == "my") return "0" + $(node).find("span").text();
        var $firstNode = $(node).find(":first-child");
        return $firstNode.length <= 0 ? $(node).html() : $firstNode.html()
    },
    debug:true
});

var usersTable = $("#pio");
usersTable.trigger("update")
  .trigger("appendCache")
  .trigger("sorton", [[[6,1], [7,1]]]);

【问题讨论】:

  • >它不起作用。 ......它怎么不起作用?你是怎么用 jssort 解决的?

标签: javascript jquery google-chrome google-chrome-extension tablesorter


【解决方案1】:

重建表格,隐藏原始表格,设置您控制的新表格。

或者当你.trigger时使用.preventDefault()

或者更改表格的idclassname 然后对其进行处理,然后.trigger


一些基于旧表创建新表的粗略代码。

function copyTable(){
  var newTRs = [];
  var theTable = $(#tableID);
  var theRows = theTable.getElementsByTagName('tr');

  for (var i=0; i < theRows.length; i++){
    //you could also evaluate each row here and manipulate it as needed.
    newTRs.push(theRows[i].cloneNode(true));
  }
  return newTRs;
}

function buildNewTable(){
    var allRows = copyTable();
    var newTable = document.createElement('table');

    newTable.appendtherows(allRows);
    oldTable.attr('display','none');//or use a .class to hide old table
    $(newTable).appendTo(oldTablesDiv);
}

【讨论】:

  • 我尝试了这两种方法。 2 不起作用。第一,我很挣扎,但发现,数据更新后它没有排序。
  • 桌子真的很大吗?如果您使用自己的类名和 id 重新创建表,那么就 DOM 而言,新表与旧表无关。该页面的脚本不会看到您的表格。还是我错过了什么?
  • 表格是200行价格、次数、费率等数字。经过这么长时间的尝试,我发现 .preventDefault() 肯定不起作用,因为在 chrome 扩展中,事件也被隔离了。所以你重新创建一个新表的观点应该有效。但这会花费我很多精力。
  • 200 一点也不大。重新创建它也不会做太多工作。我将用一些伪代码更新我的答案,以向您展示我的意思。
  • 如果这有助于您解决问题,请单击上/下零下的复选标记以接受答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2021-08-29
相关资源
最近更新 更多