кроссбраузерно присвоить значения
Есть переключатель чекбоксов. Их МНОГО (десятки тыщ). Но зато других инпутов в ноде не бывает ;-?
function toggleAllChecked(checked, node_id){
var node = document.getElementById(node_id)
var cbx = node.getElementsByTagName("INPUT");
for(var i = 1; i < cbx.length; i++){
cbx[i].checked = checked;
}
}
Из "великолепной пятёрки" почти все браузеры справляются адекватно. IE8 и Safari тормозят не по-детски. Как с этом побороться? |
document.querySelectorAll('#' + node_id + ' input:checkbox');
|
Цитата:
Ошибка: uncaught exception: [Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)" location: "http://192.168.0.152/tracking/javascript/eventsproc.js Line: 179"] Я что-то ступил? |
Упс, в querySelectorAll нет ведь такого селектора.
Пробуйте так:
document.querySelectorAll('#' + node_id + ' input[type=checkbox]');
document.querySelectorAll('#' + node_id + ' input');
|
Не совсем понимаю логику exec-а...
Лично я бы поработал бы над оптимизацией цикла... |
длину массива cbx.length сохраните в отдельной переменной это должно дать выигрыш по времени
function toggleAllChecked(checked, node_id){
var node = document.getElementById(node_id)
var cbx = node.getElementsByTagName("INPUT");
var length = cbx.length;
for(var i = 0; i < length; i++){
cbx[i].checked = checked;
}
}
|
exec,
тормозит цикл, а не выборка, а вы просто выборку усложнить предлагаете. |
Цитата:
Цитата:
Результат, однако, не достигнут: IE8 и Safari отрабатывают раза в 3 медленнее чем FF, Opera и GC. К тому же, Safari задаёт дурацкие вопросы про медленный скрипт. |
Цитата:
|
Просто интересно, для каких операций могут потребоваться "десятки тыщ" чекбоксов :blink:
|
| Часовой пояс GMT +3, время: 18:04. |