(函数($){Drupal.behaviors.tableSelect={附加:函数(上下文,设置){$('table:has(th.select-all)',context).once('tableSelect',Drupal.tableSelect);}};Drupal.tableSelect=函数(){//如果表中没有带复选框的行,则不要添加“全选”复选框if($('td输入:复选框',this).size()==0){回报;}//跟踪表格,选中哪个复选框并为设置设置别名。var table=this,复选框,lastChecked;var strings={“selectAll”:Drupal.t(“选择此表中的所有行”),“selectNone”:Drgpal.t;var updateSelectAll=函数(状态){$('th.select-all input:checkbox',table).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).parents('tr:first')[this.checked?'addClass':'removeClass']('selected');});//更新复选框的标题和状态。updateSelectAll(event.target.checked);}});//对于表中未禁用的每个复选框。复选框=$('td输入:复选框:启用',表)。单击(函数(e){//根据选中所有复选框的状态添加或删除所选类。$(this).parents('tr:first')[this.checked?'addClass':'removeClass']('selected');//如果这是shift单击,我们需要突出显示范围内的所有内容。//还要确保我们实际上选中了一个范围内的复选框,并且//以前已选中或未选中复选框。if(e.shiftKey&&lastChecked&&last Checked!=e.target){//我们使用复选框的父TR进行范围搜索。Drupal.tableSelectRange($(e.target).parents('tr')[0],$(lastChecked).parends('tra')[0,e.target.checked);}//如果选中了所有复选框,请确保也选中了select-all one,否则保持未选中状态。updateSelectAll((checkboxes.length==$(checkbox).filter(':checked').length));//跟踪上次选中的复选框。lastChecked=e.target;});};Drupal.tableSelectRange=功能(从、到、状态){//我们根据from和to的顺序确定循环模式。var模式=from.rowIndex>to.rowIndex?'previousSibling':'nextSibling';//遍历同级节点。for(var i=来自[模式];i;i=i[模式]){//确保我们只处理元素。如果(i.nodeType!=1){继续;}//根据目标复选框的状态添加或删除所选类。$(i)[状态?“addClass”:“removeClass”](“selected”);$('输入:复选框',i).each(函数(){this.checked=状态;});if(到.nodeType){//如果我们在射程的终点,停下来。如果(i==to){断裂;}}//另一种更快的方法是执行$(i).filter(to).length。else if($.filter(to,[i]).r.length){断裂;}}};})(jQuery);