(函数($){Drupal.behaviors.tableSelect={附加:函数(上下文,设置){//如果是嵌套表,请选择最里面的表。$('th.select-all',context).closest('table').once('tableSelect',Drupal.tableSelect);}};Drupal.tableSelect=函数(){//如果表中没有带复选框的行,则不要添加“全选”复选框if($('td输入:复选框',this).length==0){回报;}//跟踪表格,选中哪个复选框并为设置设置别名。var table=this,复选框,lastChecked;var strings={“selectAll”:Drupal.t(“选择此表中的所有行”),“selectNone”:Drgpal.t;var updateSelectAll=函数(状态){//更新表的select-all复选框(如果可用,还可以更新粘性标题)。$(table).prev('table.sticty-header').andSelf().find('th.select-all input:checkbox').each(function(){$(this).attr('title',state?strings.selectNone:字符串.selectAll);this.checked=状态;});};//查找全部使用类select-all,并插入check-all复选框。$('t.select-all’,table).prepend($(')').attr('title',strings.selectAll)).click(函数(事件){if($(event.target).is('输入:复选框')){//遍历所有复选框,并将其状态设置为“全选”复选框的状态。复选框.each(函数(){this.checked=事件目标已检查;//根据“全选”复选框的状态添加或删除选定的类。$(this).closest('tr').toggleClass('selected',this.checked);});//更新复选框的标题和状态。updateSelectAll(event.target.checked);}});//对于表中未禁用的每个复选框。复选框=$('td输入:复选框:启用',表)。单击(函数(e){//根据选中所有复选框的状态添加或删除所选类。$(this).closest('tr').toggleClass('selected',this.checked);//如果这是shift单击,我们需要突出显示范围内的所有内容。//还要确保我们实际上选中了一个范围内的复选框,并且//复选框以前被选中或取消选中。if(e.shiftKey&&lastChecked&&last Checked!=e.target){//我们使用复选框的父TR进行范围搜索。Drupal.tableSelectRange($(e.target).closest('tr')[0],$(lastChecked).closest('tr')[0],e.target.checked);}//如果选中了所有复选框,请确保也选中了select-all one,否则保持未选中状态。updateSelectAll((checkboxes.length==$(checkbox).filter(':checked').length));//跟踪上次选中的复选框。lastChecked=e.target;});//如果在页面加载时选中了所有复选框,请确保选中所有复选框//也被选中,否则保持未选中状态。updateSelectAll((checkboxes.length==$(checkbox).filter(':checked').length));};Drupal.tableSelectRange=功能(从、到、状态){//我们根据from和to的顺序确定循环模式。var模式=from.rowIndex>to.rowIndex?'previousSibling':'nextSibling';//遍历同级节点。for(var i=来自[模式];i;i=i[模式]){//确保我们只处理元素。如果(i.nodeType!=1){继续;}//根据目标复选框的状态添加或删除所选类。$(i).toggleClass(“selected”,state);$('输入:复选框',i).each(函数(){this.checked=状态;});if(到.nodeType){//如果我们在射程的终点,停下来。如果(i==to){断裂;}}//另一种更快的方法是执行$(i).filter(to).length。else if($.filter(to,[i]).r.length){断裂;}}};})(jQuery);