Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   GetElementById - пометить несколько элементов (https://javascript.ru/forum/dom-window/22348-getelementbyid-pometit-neskolko-ehlementov.html)

Эдди 16.10.2011 13:10

GetElementById - пометить несколько элементов
 
Помогите пэхапешнику...

Нескольким элементам на странице задаю одинаковый ID.
Затем из функции задаю для этого ID определенный стиль.
Меняется только первый встречающийся элемент.

Что, никак нельзя без массива и прокрутки в цикле изменить стиль одним вызовом GetElementById?

Может, есть другой простой способ?

Seva1986 16.10.2011 13:31

Эдди,


А ничё что id должен быть уникальным?

Seva1986 16.10.2011 13:37

http://javascript.ru/tutorial/dom/search#comment-1770

melky 16.10.2011 14:06

document.getElementsById = function(id){
    var el = document.getElementById(id);
    if(!el) return el;
    var els = document.getElementsByTagName(el.tagName),
        i = 0,
        res = [];
    
    while(els[i]){
        if(els[i].id==id)
            res.push(els[i]);
        i++;
    }
    return res;
};


DEMO:
<script>
document.getElementsById=function(e){var a=document.getElementById(e);if(!a)return a;for(var a=document.getElementsByTagName(a.tagName),b=0,c=[];a[b];)a[b].id==e&&c.push(a[b]),b++;return c};
</script>
<div id="a">lol</div><div id="a">lol</div><div id="a">lol</div><div id="a">lol</div><div id="a">lol</div>
<script>
*!*
document.getElementsById('a').forEach(function(a){a.style.border="1px red solid"});
*/!*
</script>

Эдди 16.10.2011 16:19

Цитата:

Сообщение от Seva1986 (Сообщение 131390)
Эдди,


А ничё что id должен быть уникальным?

Оба на!:blink:
Ну так и думал. Не люблю циклы, блн.
Хотя в php тоже только массив.

melky В код не вникал сильно, но легче (проще, то есть) разве нельзя сделать?
Сам попробую, выложу... (если получится:))

И не считайте меня неучем, но насчет уникальности ID я нигде не читал. Ни в пособиях, ни в инете.-(
Мог бы просто догадаться...

По-любому - СПАСИБО!!!

B@rmaley.e><e 16.10.2011 16:46

Цитата:

Сообщение от melky
var a=document.getElementById(e);if(!a)return a;for(var a=document.getElementsByTagName(a.tagName)

Элементы с одинаковым ID имеют одинаковый tagName? Сильное предположение.

Эдди 16.10.2011 16:56

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 131430)
Элементы с одинаковым ID имеют одинаковый tagName? Сильное предположение.

Хотелось бы. Могу выделить их в одинаковые tagname.
Только сайт постоянно видоизменяется.
И если завтра добавлю те же теги для других функций, получится каша. Не так?

А просто getbyname тоже не канает?
Читал, что только определенные теги его поддерживают. Но, может, это устарело?

Мне надо пометить тексты в ячейках таблицы.

B@rmaley.e><e 16.10.2011 17:00

Маркируйте нужные элементы указанием class'а (благо, они совсем не обязаны быть уникальными, и можно назначить несколько классов одному элементу) и выбирайте элементы с помощью getElementsByClassName (только не забудьте, что очень старые браузеры вроде IE6 не знают такого метода).

Эдди 16.10.2011 17:02

Давайте смысл опишу того, что мне надо. Может, придет какое более простое решение.

Онлайн-заказ.
Человек заказал кучу разнообразных товаров.

В конце ему выводится таблица, где в строках все эти товары выводятся.
Со стоимостью, с его скидкой. Скидка где есть, где ее нет.
И возникает вопрос, а почему там совокупность товара стоила, скажем, 100 долларов и комиссия была 10%, а почему к оплате не 90 долларов, к 85?
А потому что, каждый раз приходится объяснять, что не со всех товаров дается одинаковая комиссия. С некоторых не дается вообще.

Потому: Хочется сделать "для дурака".
В таблице внизу будет только ИТОГО.
А при желании, при клике на Цены подробно, появятся все цены в таблице.

Не знаю, объяснился или нет.-(

B@rmaley.e><e Можно конкретнее или ссылку? Не понял. Не дружу с очень нравящимся мне js
То есть, ввести новый класс и помечать как класснейм?
Как же мне не хотелось создавать лишние классы.
Но, наверное, это тоже выход, как и тот, который с прокруткой массива...

Seva1986 17.10.2011 01:08

Эдди,
Использовать классы вместо id

Я же ссылку выложил http://javascript.ru/tutorial/dom/search#comment-1770

Там пример функции которая эмитирует работу getElementsByClassName http://javascript.ru/tutorial/dom/search#drugie-sposoby насколько я понял кросбраузерно (сам не пробовал)


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