2014-03-18 20 views
1

我正在尝试做这个项目100%Javascript,没有任何JQuery。如何用Javascript模拟JQuery的find-last方法

我有一个十列表,当用户在表格的最后一行的选择框(类selectprod)中“跳出”时,无论它有多大或多小,我都要添加一个新行或缩小。我不希望每个select.selectprod都有这个keydown属性,只是动态表最后一行的select.selectprod。

问题是,当我添加addEventListener(唯一的办法,我可以认为这样做,这可能是错误的)到最后一行,然后添加一个新的行,我必须从上一行removeEventListener并添加它到了最后一排。不知道如何做到这一点。

jQuery中,我可以听的最后一排的第4列细胞,不管有多少行被添加和使用删除:

function addRowWithTab() { 
     alert('is it listening'); 
     $(table).find("tr:not(.noedit):last select.selectprod").on("keydown",function(e) { 
      if(e.keyCode == 9) { 
       alert('tabbed !!! '); 
       addRow(); 
      } 
     }); 
    } 

但我怎么模拟

$(table).find("tr:not(.noedit):last select.selectprod").on("keydown",function(e) {.... 

用Javascript? 到目前为止,我有以下几种看起来像甚至开始思考它的错误方式。

function addListener(){ 
     var oldlength = document.getElementById("table1").getElementsByTagName('select').length; 
     var oldlength = oldlength-1; 
     var el = document.getElementById("item_" + oldlength); 
     el.removeEventListener("click", createRow, false); 

     var length = document.getElementById("table1").getElementsByTagName('select').length; 

     var el = document.getElementById("item_" + length); 
     el.addEventListener("click", createRow, false); 
    } 

这让我疯狂!我应该尝试将所有select.selectprods添加到节点列表中,并且有一个函数以某种方式始终监听列表中的最后一个,即使该列表正在扩展和收缩? 请帮忙!

+0

看一看[** Document.querySelectorAll **](https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll)和[**元。 querySelectorAll **](https://developer.mozilla.org/en-US/docs/Web/API/Element.querySelectorAll)。他们采用一个或多个以逗号分隔的CSS选择器。 – Nope

回答

1

找出一个很好的解决方法:它遍历所有选择元素,擦除事件侦听器,直到最后一次选择并添加事件侦听器。好极了。

function onTab(e){ 
     //alert("hi" + e); 
     if(e.keyCode === 9) { 
      //alert('tabbed !!! '); 
      createRow(); 
     } 
    } 


    function addListener(){ 

     var selectnodes = document.getElementById("table1").getElementsByTagName('select'); 
     length = selectnodes.length; 

     for (i=0; i <= selectnodes.length; i++){ 
      if(i > 0){document.getElementById("item_" + i).removeEventListener("keydown",onTab,false);} 
      if(i === selectnodes.length){ 
       //alert("we got here!\ni = " + i + "\nand length is " + selectnodes.length); 
       document.getElementById("item_" + i).addEventListener("keydown",onTab,false); 
      } 
     } 
    }