我有一张桌子上有很多td' s。选择2选择2和中间的所有内容的最有效方法是什么?
在选择1上,我给选定的td一个id,在选择2上,我给那个选择另一个id,以便稍后查找那些id。
当前代码:
// small helpers
function _for(e,f) { var i, len=e.length; for(i=0;i<len;i++){ f(e[i]); }}
function _id(e) { return document.getElementById(e); }
// VARs
var main = _id('monthTables'),
td = main.querySelectorAll('td'),
go = false,
stop = false,
i = 0,
s1i = 0,
s2i = 999;
// Loop throught td's
_for(td, function(e){
if( e.id == 'sel1' ) { go = 1; s1i = i; }
if( e.id == 'sel2' ) { stop = 1; s2i = i; }
if( s1i < s2i && go ) {
if(go) { e.classList.add('range'); }
}
if( stop ) { go = 0; }
}) // end loop
实例(选择两个日期):
http://cdn.rawgit.com/tommiehansen/lightRange/master/test.html
答案 0 :(得分:0)
我认为代码很好,也许你可以添加一些优化(比如找到第二个选择的id时停止循环)
循环示例:
function _for(e,f) {
var i, len=e.length;
for(i=0;i<len;i++){ if(f(e[i]) === false) break; }
}
因此当函数f返回false
// Loop throught td's
_for(td, function(e){
//...
if( stop ) return false;
}) // end loop
另外,如果您想要更多performance,我建议您使用getElementsByTagName
代替querySelectorAll
..但也许这是一个邪恶的微优化
另一个优化是从第一个选定的td开始循环,可能是storing the index当你选择td并在你发布的代码中使用该值作为初始索引