• Страница 1 из 1
  • 1
Модератор форума: JonMagon  
Проблема с document.getElementsByClassName()
bulken
Сообщений: 41
Репутация: 0

Сообщение # 1 | 11:11:03
Как обратиться к дополнительному полю 1 как к переменной (числовой или текстовой)


на странице /shop/checkout при попытке вывести переменную доп.поля 1 (обведено красным) - на экране возвращается объект типа Nodelist (знак >'0' игнорирует)

<script type="text/javascript">
if (document.getElementsByClassName('order-item-other1')>'0') {
var nal = document.getElementsByClassName('order-item-other1')
alert(nal)
}
</script>

ниже код таблицы (показанный на рисунке)

Код<form id="order-form" method="POST" action="" onsubmit="if(_shopLockButtons()) return false; _shopFadeControl('order-table');_uPostForm('order-form'); return false;">
<input type="hidden" name="mode" value="recalc">
<input type="hidden" name="ssid" value="130072001406717603036">
<div id="order-table" style="position:relative;">
<table cellspacing="2" cellpadding="3" width="100%" border="0">
<thead>
<tr class="order-head">
<th class="order-item-nom" width="1%">№</th>
<th class="order-head-name">Наименование</th><th class="order-head-other1">Дополнительное поле 1</th>
<th class="order-head-price" width="1%">Цена</th>
<th class="order-head-cnt" width="1%" nowrap>Кол-во</th>
<th class="order-head-sum" width="1%">Сумма</th>
<th class="order-head-del" width="1%">Удалить</th>
</tr>
</thead>
<tr id="order-item-1" class="order-item "><td class="order-item-nom">1.</td><td class="order-item-name" ><a href="/shop/6/desc/perchatki-burton-mix-master" target="_blank">Перчатки Burton Mix Master</a></td><td class="order-item-other1" >-1</td>
<td class="order-item-price" nowrap>160руб.</td>
<td class="order-item-cnt"><input type="text" name="cnt_1" maxlength="5" size="5" value="1"></td>
<td class="order-item-sum" nowrap>160руб.</td>
<td class="order-item-del" align="center"><input type="checkbox" name="del_1" value="1"></td>
</tr>
<tr>
<td colspan="3"><input type="button" value="Продолжить покупки" onclick="location.href='/shop'" id="order-but-continue"></td>
<td align="right"><input type="submit" value="Пересчитать" id="order-but-recalc"></td>
<td align="right" class="order-total">Итого:</td>
<td colspan="2" class="order-total">160руб.</td>
</tr>
</table>
</div>
</form>
Прикрепления: 0737782.png (18.1 Kb)
Сообщение отредактировал bulken - Вторник, 26 Ноя 2013, 11:19:01
JacksonMihailov
Сообщений: 259
Репутация: 107

Сообщение # 2 | 11:29:36
Код
<script type="text/javascript">  
$.ready(function(){
var nal = $('.order-item-other1').text()
alert(nal)
});
</script>

jmDB - Текстовая база данных для uCoz
HETPE3B
Сообщений: 1976
Репутация: 409

Сообщение # 3 | 11:38:41
Попробуйте так:
Код

$(".order-item-other1").each( function () {
   if ($(this).text() > 0) {
     alert($(this).text());
   }
});


Дело в том, что document.getElementsByClassName('order-item-other1') в Вашем случае работать не будет, потому что возвращает массив, ведь классов может быть несколько. Оно и понятно, ведь, товаров может быть несколько в таблице. Чтобы по массиву пробежаться используется each(), $(this) получает ячейку как элемент массива, но мы не можем его сравнивать с числом, а чтобы получить текст ячейки используется text(). И только теперь сравнивать можно.

bulken
Сообщений: 41
Репутация: 0

Сообщение # 4 | 12:06:31
Спасибо большое вам обоим!! помогло! Нетрезв, отдельно респект тебе!!!
Но вот только последний вопрос... а если order-item-other1 будет равен тексту "есть в наличии" а не "-1" то вместо if ($(this).text() > 0) что писать?

Добавлено (26 Ноя 2013, 12:06:31)
---------------------------------------------
а, вроде разобрался)

JacksonMihailov
Сообщений: 259
Репутация: 107

Сообщение # 5 | 12:55:01
bulken,
Код
if ($(this).text() > 0 || $(this).text() = 'есть в наличии')

jmDB - Текстовая база данных для uCoz
JonMagon
Сообщений: 2291
Репутация: 1828

Сообщение # 6 | 16:21:27
bulken,
Код
$(".order-item-other1").each(function () {$(this).text() != -1 ? alert("Товар есть в наличии") : alert("Товар отсутствует")}});

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
bulken
Сообщений: 41
Репутация: 0

Сообщение # 7 | 08:45:49
Цитата HETPE3B ()
$(".order-item-other1").each( function () {
if ($(this).text() > 0) {
alert($(this).text());
}
};);
тогда другой вопрос на эту же тему.
Как мне можно удалить или поменять значения в массиве из двух элементов? (на рисунке выделено красным):



я к нему обращаюсь так:
Код
$(".order-total").each( function () {  
      alert($(this).text());  
};);

В итоге выводит последовательно два сообщения: "Итого:" и "500 руб"
Прикрепления: 1649804.png (13.5 Kb)
HETPE3B
Сообщений: 1976
Репутация: 409

Сообщение # 8 | 13:38:03
bulken, попробуйте понять суть: each() проходится по всем DOM элементам с классами .order-total и выполняет для КАЖДОГО alert($(this).text());

Или просто ответьте на вопрос "а чо надо-та?" smile Не зная Вашей конечной цели, тяжело ответить на вопрос, т.к. он до конца не понятен.

bulken
Сообщений: 41
Репутация: 0

Сообщение # 9 | 21:46:55
Цитата HETPE3B ()
bulken, попробуйте понять суть: each() проходится по всем DOM элементам с классами .order-total и выполняет для КАЖДОГО alert($(this).text());
Я как раз пытаюсь понять суть, понять как обращаться к Dom элементам) а alert для проверки
В данном случае мне нужно просто убрать эту строку: "Итого: 500 руб". То есть обратиться последовательно к двум этим элементам с классами .order-total (лучше без цикла, потому что в domе всего 2 элемента). Как обращаться к конкретному dom-элементу, например к "Итого:" - не знаю)
В другом месте тоже нужно обратиться к dom элементу но уже с классом "myWinTD1": //forum.ucoz.ru/forum/43-59430-1#1118502
но только там нужно не удалить а поменять надпись.
Вся проблема в том, что dom элементы находятся в закрытом шаблонном коде ucoz..и поэтому приходится приделывать эти костыли с изменением dom элемента после его создания.
Надеюсь смог изъяснится unsure
  • Страница 1 из 1
  • 1
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!