Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   массове выделение:) (https://javascript.ru/forum/events/14823-massove-vydelenie.html)

розовый слоник 02.02.2011 12:53

массове выделение:)
 
Добрый день жителям форума:)
Хочу сделать выделение строчек в таблице через щелчок по checkBox и зажатой клавиши shift(точнее я уже сделал но оно медленно отрисовывает) пример, как выделение писем на ya.ru, gmail.com, mail.ru и другие.

Как я делаю.
Условие для выделения строк через клавишу shift

if(shiftKey == true) {
        var lastElArray = arrayCheckBox.length - 1;
        var firstCheckBox = parseInt(arrayCheckBox[lastElArray]);
        var lastCheckBox = parseInt(input.name);
        var getElTagName = f_a('bHDSTbody_datasheet_T_a').getElementsByTagName('input');
        
        for (vaк i=0;i<getElTagName.length;i++){
            var element = getElTagName[i];
            var nextPosition = parseInt(element.name);
            if(firstCheckBox < lastCheckBox){
                if(element.type == "checkbox" && nextPosition < lastCheckBox && nextPosition > firstCheckBox){
                    addBgColorTableFild(element);
                }
            }else if(firstCheckBox > lastCheckBox){
                if(element.type == "checkbox" && nextPosition > lastCheckBox && nextPosition < firstCheckBox){
                    addBgColorTableFild(element);  
                }
            }
        }
    }


функция addBgColorTableFild просто добавляет к тегам tr класс с нужным мне бекграундом.
Функция f_a() это функция поиска элемента по id(это для понимания кода).

Насколько я понимаю вся проблема из за того, что я прохожусь по всем чек боксом и отбираю из них только те которые мне нужны. Все из за того что я не могу скачать циклу пройтись скажем от firstCheckBox до lastCheckBox из за того, что строчки можно удалять, а атрибут name в них остаются неизменным.

Короче все вот так вот плохо:) может кто то посоветует или на толкнет на мысль :) буду признателен:)

розовый слоник 02.02.2011 13:03

стоп я кажется придумал) можно же сделать с nextSibling :)
но если кто то знает еще варианты пишите я попробую что быстрее работает.

Kolyaj 02.02.2011 13:34

Цитата:

Сообщение от розовый слоник
f_a() это функция поиска элемента по id

Оригинально.

Цитата:

Сообщение от розовый слоник
но оно медленно отрисовывает

Удаляйте части кода и смотрите, что тормозит.

розовый слоник 02.02.2011 14:38

Kolyaj
иногда и не так обзовешь функцию:)

уже нашел, что тормозит код, спс за помощь:)

ksa 02.02.2011 14:40

Цитата:

Сообщение от розовый слоник
выделение строчек в таблице

Цитата:

Сообщение от розовый слоник
можно же сделать с nextSibling

Цитата:

Сообщение от розовый слоник
если кто то знает еще варианты пишите

Таки пишу... :D

<html>
<head>
<title></title>
<style type="text/css">
</style>
<script>
function Go() {
	var o=document.getElementById('test'),i
	o=o.getElementsByTagName('input')
	for (i=0; i<o.length; i++) {
		if (o[i].type=='checkbox') {
			o[i].checked=true
		}
	}
}
</script>
</head>
<body>
<table id='test'>
	<tr>
		<td><input type='checkbox' /></td>
	</tr>
	<tr>
		<td><input type='checkbox' /></td>
	</tr>
	<tr>
		<td><input type='checkbox' /></td>
	</tr>
</table>
<input type='button' value='Go' onclick='Go()' />
</body>
</html>

розовый слоник 02.02.2011 15:05

ksa
Извините но я не понял чем ваш способ отличается от моего.

ksa 02.02.2011 15:13

розовый слоник, тогда не понятно что там у тебя может "тормозить". :)

розовый слоник 02.02.2011 17:02

как оказалось было чему тормозить там:)
я уже все поправил:) спс за внимание:)


Часовой пояс GMT +3, время: 05:02.