кроссбраузерно присвоить значения
Есть переключатель чекбоксов. Их МНОГО (десятки тыщ). Но зато других инпутов в ноде не бывает ;-?
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, время: 11:38. |