У меня есть таблица с большим количеством тд. Какой был бы самый эффективный способ выбрать выбор 1 для выбора 2 и все между ними?Выбирайте элементы между A и B эффективно
При выборе 1 я даю выбранный td идентификатор и по выбору 2, я даю этому выбору другой идентификатор, чтобы впоследствии искать эти идентификаторы.
Текущий код:
// 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
это выглядит хорошо. – Nirus
Просто хранить результаты в массиве. Вы также можете реорганизовать своего помощника, чтобы было возможно «вернуться» раньше от вашей функции '_for' - вам не нужно ничего делать с элементами после того, как вы нашли маркер конца. –
@ OlegV.Volkov 'main.querySelectorAll ('td')' - массив. Проблема с модификацией '_for' -helper заключается в том, что она является общей функцией, которая используется во всем коде для разных целей. Вы правы, что не нужно продолжать цикл, когда все условия выполнены. A 'if (! Stop) {/ * CODE * /}' в начале цикла разрешит некоторые из них, однако, если выбрать td 531, цикл все равно должен пройти через 531 элемент и проверить все условия на них. – Tommie