Поиск тега td class="spacerow"

 
0
 
JavaScript
ava
nule | 04.11.2011, 16:36
Приветствую!
Ищу все теги td с class="spacerow"

var tdclasses = document.getElementsByTagName("td");
tdClSpacerow = new Array();
for (i=0; i<=tdclasses.length; i++ )
if (tdclasses[i].className = 'spacerow' ){
tdClSpacerow.push(tdclasses[i])
}

И вот такая ошибка:

"tdclasses[...].className" - есть null или не является объектом

Подскажите, пожалуйста, что не так?
Спасибо!
Kommentare (29)
ava
iff | 04.11.2011, 16:00 #
Что если попробовать просто tdclasses[i].class?
ava
Evghenusi | 04.11.2011, 16:07 #
 if (tdclasses[i].className = 'spacerow' ){

?
ava
nule | 04.11.2011, 16:09 #
Цитата (iff @ 4.11.2011, 16:00)
Что если попробовать просто tdclasses[i].class?

Тогда говорит "предполагается наличие идентификатора"

später ergänzt:
Цитата (Evghenusi @ 4.11.2011, 16:07)
 if (tdclasses[i].className = 'spacerow' ){


?

Пардон, не улавливаю разницы.
ava
Evghenusi | 04.11.2011, 16:16 #
там присваивание или сравнение?

später ergänzt:
и разницы нет, я твой код процитировал

später ergänzt:
неудачно процитировал)
ava
nule | 04.11.2011, 16:22 #
Цитата (Evghenusi @ 4.11.2011, 16:16)
там присваивание или сравнение?



später ergänzt:

и разницы нет, я твой код процитировал



später ergänzt:

неудачно процитировал)

А, ну да. Там в if должно быть "==", а не "=", но на данную ошибку это не влияет.
ava
z-END | 04.11.2011, 16:28 #
nule, а какова длинна массива tdclasses, и сколько итераций в цикле?!
ava
nule | 04.11.2011, 16:34 #
Цитата (z-END @ 4.11.2011, 16:28)
nule, а какова длинна массива tdclasses, и сколько итераций в цикле?!

В качестве тестового документа я использую сохраненную страницу форума. alert(tdclasses.length) выдает в моем случае 39.
ava
Evghenusi | 04.11.2011, 16:41 #
for (i=0; i<=tdclasses.length; i++ ) - приравниваешь зря
равно убери и проблема пропадёт

später ergänzt:
z-END, копал в нужную сторону smile
ava
z-END | 04.11.2011, 17:11 #
Цитата (nule @ 4.11.2011, 17:34 findReferencedText)
В качестве тестового документа я использую сохраненную страницу форума. alert(tdclasses.length) выдает в моем случае 39.

а сколько итераций?

Evghenusi, я особо и не копал. я сразу намекнул)
ava
nule | 04.11.2011, 17:17 #
Да, дело было именно в этом. Спасибо!
Стало быть теперь получен массив из тегов tb с заданным class? Но alert(tdClSpacerow.lenght) говорит undefaned smile
В документе искомые теги присутствуют. Как минимум два.
ava
Evghenusi | 04.11.2011, 17:18 #
Цитата (z-END @ 4.11.2011, 17:11 findReferencedText)
а сколько итераций?

40 (логично было предположить), или это снова намёк?))

später ergänzt:
Цитата (nule @ 4.11.2011, 17:17 findReferencedText)
Стало быть теперь получен массив из тегов tb с заданным class? Но alert(tdClSpacerow.lenght) говорит undefaned smile

В документе искомые теги присутствуют. Как минимум два.
обрати внимание на красный цвет
ava
nule | 04.11.2011, 17:25 #
Цитата (Evghenusi @ 4.11.2011, 17:18)
Цитата (z-END @  4.11.2011, 17:11 \\"findReferencedText\\")
а сколько итераций?


40 (логично было предположить), или это снова намёк?))



später ergänzt:

Цитата (nule @ 4.11.2011, 17:17 \"findReferencedText\")
Стало быть теперь получен массив из тегов tb с заданным class? Но alert(tdClSpacerow.lenght) говорит undefaned smile


В документе искомые теги присутствуют. Как минимум два.
обрати внимание на красный цвет

Ладно понял, я спать.
ava
Evghenusi | 04.11.2011, 17:32 #
то есть тема не закрыта?
ava
nule | 04.11.2011, 17:33 #
Да, всем спасибо. Всё получилась. Тему пометил, как решенную.
ava
magelan | 05.11.2011, 11:55 #
В ие 8 работать не будет, а так - все пучком.
ava
nule | 05.11.2011, 17:12 #
Цитата (magelan @ 5.11.2011, 11:55)
В ие 8 работать не будет, а так - все пучком.

Ну здрасьте :(
А мне как раз в основном для IE8.
А есть кроссбраузерный вариант?
ava
magelan | 05.11.2011, 18:56 #
ослики не ищут td тагнеймами
как-то так надо, наверное:

var tables = document.getElementsByTagName( 'table' );
for( var ti = 0; ti < tables.length; ti++ )
with( tables[ ti ])
for ( var i=0; i<=rows.length; i++ )
for ( var j=0; j<=rows[ i ].cells.length; j++ )
if( rows[ i ].cells[ j ].className.indexOf( 'spacerow' ) != -1 )
tdClSpacerow.push( rows[ i ].cells[ j ]);

поправил проверку, т.к. в атрибуте класс может быть указанно больше одного класса, она более корректна, чем сравнение, но все равно не верная, класс надо разделять с помощью split на массив и сравнивать spacerow с элементами массива...
ava
z-END | 05.11.2011, 19:03 #
Цитата (magelan @ 5.11.2011, 19:56 findReferencedText)
ослики не ищут td тагнеймами

что-то мне подсказывает все они ищут, если на странице DOM не через пень-колоду...
ava
magelan | 05.11.2011, 19:11 #
мое дело предупредить... дальше можете проверять сами. smile
ava
nule | 05.11.2011, 19:18 #
Цитата (magelan @ 5.11.2011, 19:11)
мое дело предупредить... дальше можете проверять сами. smile

Ладно, напишу как дойдет дело до 8.
ava
z-END | 05.11.2011, 19:32 #
Цитата (magelan @ 5.11.2011, 20:11 findReferencedText)
мое дело предупредить... дальше можете проверять сами

народ вы путаете...
IE прекрасно отрабатывает.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<table><tr><td>dsdsa d</td></tr><td class="spacerow">DDD</td></table>
</body>
<script>
window.onload=function(){
var tdclasses = document.getElementsByTagName("td");
tdClSpacerow = new Array();
for (i=0; i<tdclasses.length; i++ ) {
if (tdclasses[i].className == 'spacerow' ){
tdClSpacerow.push(tdclasses[i])
}
}
alert(tdClSpacerow);
};
</script>
</html>

ava
nule | 05.11.2011, 19:35 #
Есть мнение, что getElementsByClassName не везде работает, но здесь оно не используется.
ava
z-END | 06.11.2011, 19:19 #
Цитата (nule @ 5.11.2011, 20:35 findReferencedText)
Есть мнение, что getElementsByClassName не везде работает, но здесь оно не используется.

есть мнение, что здесь мы обсуждаем getElementsByTagName
ava
magelan | 07.11.2011, 11:45 #
Цитата (z-END @ 6.11.2011, 19:19)
Цитата (nule @  5.11.2011, 20:35 \\"findReferencedText\\")
Есть мнение, что getElementsByClassName не везде работает, но здесь оно не используется.


есть мнение, что здесь мы обсуждаем getElementsByTagName

пришел на работу проверил getElementsByTagName, действительно работает (наверное у меня были глюки с браузером или ошибки в коде, когда я на это налетал)
но проверка класса остается открытой, никто не застрахован от:

<td class="spacerow " />
<td class="spacerow crop10 m22" />
<td class="my_td spacerow" />

поэтому, проверять надо, например, так:

var checkClass = function( cls, test )
{
if( cls.indexOf( ' ' ) == -1 )
return (cls == test );
else
{
var a = cls.split( ' ' );
for( var i = 0; i < a.length; i++ )
if( a[ i ] == test )
return true;
return false;
}
}
ava
&#036;дмитрий | 07.11.2011, 12:18 #
Цитата


Ищу все теги td с class="spacerow"



$('td.spacerow');

И все дела smile
ava
magelan | 07.11.2011, 12:43 #
все дела это +100кб на страницу ради такой проверки?

перекреститесь что-ли.
ava
z-END | 07.11.2011, 13:03 #
Цитата (magelan @ 7.11.2011, 13:43 findReferencedText)
все дела это +100кб

меньше 60 )) http://code.google.com/p/jqueryjs/download...ry-1.3.2.min.js

да и что такое 100 кб, которые загрузятся 1 раз и далее будут жить в кэше... это меньше 1 секунды при 1-мегабитной скорости.. если быстрее то вообще моментально..
ava
&#036;дмитрий | 07.11.2011, 17:22 #
Цитата


все дела это +100кб на страницу ради такой проверки?


Наверняка кроме этой проверки на сайте есть еще работа для JS, а на фреймворке стандартные задачи всегда решаются быстрее. Зачем тратить драгоценное время на написание километрового кода, когда все решается одной строчкой
Что касается размера: не нужно в 3 раза преувеличивать, сжатый Jquery 1.6 весит 30Kб, но даже 100Кб это совершенно не критично, прошло время dial-up, настала эра быстрого интернета и замечательных фреймворков. А если фреймворк подключен из хранилище есть вероятность того что он уже находится в кеше

p.s. Экономить нужно там где это нужно!
ava
magelan | 07.11.2011, 23:16 #
гаджеты никто не отменял, там с инетом не все так радужно.

если вам на браузере понадобился толстый клиент, значит либо вы делаете портальное интранет решение, либо что-то неправильное.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden