Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击另一列时更改标题的Javascript_Javascript_Sorting_Html Table_Title - Fatal编程技术网

单击另一列时更改标题的Javascript

单击另一列时更改标题的Javascript,javascript,sorting,html-table,title,Javascript,Sorting,Html Table,Title,我有一个表,在点击另一列中的标题后,我想重置任何其他列以表示排序方式。目前我有: <html> <head> <script> function changeSort(obj) { var firstName = document.getElementById('fName'); var lastName = document.getElementById('lName'); var phoneNumber = document.getEle

我有一个表,在点击另一列中的标题后,我想重置任何其他列以表示排序方式。目前我有:

<html>
<head>
<script>
 function changeSort(obj)
 {  

  var firstName = document.getElementById('fName');
 var lastName = document.getElementById('lName');
 var phoneNumber = document.getElementById('phone');
var birthDate = document.getElementById('birth');


if(obj.id == 'fName')
{
//alert("fName");
 obj.title = (obj.title== 'sort ascending first name') ? 'sort descending first 
 name' : 'sort         ascending first name';   
 }

if(obj.id == 'lName')
{
 //alert("lName");
 obj.title = (obj.title== 'sort ascending last name') ? 'sort descending first name' : 'sort   
ascending last name';   
 }

 if(obj.id == 'phone')
  {
  //alert("phone");
  obj.title = (obj.title== 'sort ascending phone number') ? 'sort descending phone  
  number' : 'sort ascending phone number';   
  }

 if(obj.id == 'birth')
 {
  //alert("birth");
   obj.title = (obj.title== 'sort ascending birth date') ? 'sort descending birth      
   date' : 'sort   
  ascending birth date';   
   }   

   }

  </script>
 </head>
 <body

     <table> 

  <tr>
            <th id="fName" onclick='changeSort(this)' title="sort by First Name" >First Name</th>
    <th id="lName" onclick='changeSort(this)' title="sort by Last Name" >Last   
    Name</th>
    <th id="phone" onclick='changeSort(this)' title="sort by Phone Number" >Phone   
   Number</th>
    <th id="birth" onclick='changeSort(this)'title="sort by Birth Date" >Birth   
    Date</th>
    </tr>

   </table>

  </body>
  </html>

函数更改排序(obj)
{  
var firstName=document.getElementById('fName');
var lastName=document.getElementById('lName');
var phoneNumber=document.getElementById('phone');
var birthDate=document.getElementById('birth');
如果(obj.id==“fName”)
{
//警报(“fName”);
obj.title=(obj.title=='按升序排列名')?'按降序排列名'
名称':'按升序排列第一个名称';
}
如果(obj.id=='lName')
{
//警报(“lName”);
obj.title=(obj.title==“排序升序姓氏”)?“排序降序姓氏”:“排序
升序姓氏';
}
如果(obj.id=='phone')
{
//警报(“电话”);
obj.title=(obj.title=='排序升序电话号码')?'排序降序电话
号码':'按升序排列电话号码';
}
如果(obj.id==‘出生’)
{
//警惕(“出生”);
obj.title=(obj.title=='排序升序出生日期')?'排序降序出生
日期“:”排序
上升出生日期';
}   
}

在函数末尾,您应添加:

firstName.title = obj.id == 'fName'? firstName.title : 'sort by first name';
lastName.title = obj.id == 'lName'? lastName.title : 'sort by last name';
phoneNumber.title = obj.id == 'phone'? phoneNumber.title : 'sort by phone number';
birthDate.title = obj.id == 'birth'? birthDate.title : 'sort by birth date';

有更干净的方法可以做到这一点,但我们必须重构整个代码…

根据安德烈的观点,有更干净的方法,下面是代码重构,使其独立于列数,或者更一般

function changeSort(th){
    var titleTemplates = {
        asc:  'sort ascending %s',
        desc: 'sort decending %s',
        dflt: 'sort by %s'
    };
    titleTemplates.get = function(key, txt){
        var t = this[key] || this.dflt;
        return t.replace('%s', txt);
    };
    var headerRow = th.parentNode;
    var cells = headerRow.getElementsByTagName('th');
    for(var i=0; i<cells.length; i++){
        var c = cells[i];
        var s = c.getAttribute('sortCode');
        var s_ = (c !== th) ? '' : (!s || s == 'desc') ? 'asc' : 'desc';
        c.setAttribute('sortCode', s_);
        c.title = titleTemplates.get(s_, c.innerHTML);
    }
}
函数更改排序(th){
变量titleTemplates={
asc:'升序排序%s',
desc:'排序下移%s',
dflt:“按%s排序”
};
titleTemplates.get=函数(键,txt){
var t=this[key]| | this.dflt;
返回t.replace('%s',txt);
};
var headerRow=th.parentNode;
var cells=headerRow.getElementsByTagName('th');

对于(var i=0;iI将
&
添加到三元条件中:
obj.id='fName'&&firstName.title!='sort by first name'
,因此它只在必要时更新(弄乱DOM是不明智的)当点击另一列时,两个都没有更新标题。他们都说升序不是一个使用排序方式,另一个使用升序或降序。你确定你做得对吗?这必须在thr changeSort函数的末尾。是的,我把它放在birth if语句的结束括号之后和结束之前函数的括号哦,你能把它放在JSFIDLE中吗?为了进行微观优化,你可以使用
for(var i=0,len=cells.length;我不工作所有标题都按顺序排序,从不说升序或降序好的,我做了一个轻微的编辑-将
th.parentNode()
更改为
th.parentNode
(我太习惯jQuery了;它是一个属性,而不是原生js中的方法)