как перечислить все теги div с одинаковыми идентификаторами? - PullRequest
1 голос
/ 12 июля 2010

У меня есть веб-страницы на основе виджета, и я присвоил всем div одинаковый атрибут ID.После загрузки страницы я хочу перечислить все элементы div, которые соответствуют элементу ID 'widget'.Я использую jQuery .

Затем я хочу получить внутренний атрибут div внутри div 'widget', который будет использоваться в качестве всплывающей подсказки.Я хочу получить все виджеты с идентификатором 'widget' (у меня около 20 виджетов на страницу) и получить все div, идентификатор которых совпадает с 'tooltip-content' внутри виджета.Один виджет имеет 5 или 6 подсказок-контента.Можете ли вы помочь мне перечислить div?

Ответы [ 4 ]

7 голосов
/ 12 июля 2010

идентификаторы должны быть уникальными в документе; вы должны иметь только один элемент для каждого идентификатора. См. w3schools

Идентификатор должен быть уникальным в документе HTML.

То, что вы хотите сделать, это использовать атрибут class для каждого из этих элементов, а затем выбрать на основе имени класса. Если вы используете каркас, такой как Prototype, jQuery или Ext (или другой, который вы предпочитаете), должен быть метод для выбора элементов по селектору CSS или по имени класса. Я рекомендую вам добавить класс с именем widget к каждому из этих элементов и вместо этого дать им уникальные идентификаторы

6 голосов
/ 12 июля 2010

Я дал всем div одинаковый ID

Это ваша проблема.Идентификатор по определению должен быть уникальным.Если он не уникален, то вы сталкиваетесь со всевозможными проблемами (например, не можете легко их перечислить).Вместо этого вы можете использовать атрибут class (один элемент может иметь несколько классов, разделяя их пробелами, поэтому class="widget span-8" хорошо).

Затем вы можете использовать селектор на основе классов jQuery для простого перечисления:

$(".widget").each(function() {
    ...
});
2 голосов
/ 12 июля 2010

Технически идентификаторы элементов всегда должны быть уникальными, да, у вас могут быть элементы с одинаковым идентификатором, но вы столкнетесь с такими проблемами.Где механизм выбора jQuery ожидает только один элемент с заданным идентификатором, так что в итоге он найдет первый элемент и проигнорирует остальные.

Что вам нужно сделать, так это дать им один и тот же класс, например

class="widget"

и селектор будет

$(".widget")

РЕДАКТИРОВАТЬ: ах да, почему-то я думал, вы упомянули, что вы используете jQuery.но вот функция, которая получает все элементы по идентификатору, которая не требует никакой библиотеки

/*
 * ElementsById
 *
 * Author: Diego Perini
 * Updated: 07/12/2006
 * Version: 0.0 (from parent)
 *
 * Extracted from latest IPORT/STYLER engines.
 *
 * Returns an array of elements with specified ID.
 */
function ElementsById($id) {
    var c = 0, i = 0, j = 0, k = 0;
    var nodes=[], storage = arguments.callee.storage;
    var elements = document.getElementsByTagName('*');
    var length = elements.length;
    if (storage &&
        storage.nodes &&
        storage.length == length &&
        storage.first == elements[0] &&
        storage.last == elements[length-1]) {
        k = $id;
        while (storage.nodes[k]) {
            nodes[nodes.length] = storage.nodes[k];
            k = $id + '*' + (++i);
        }
    } else {
        storage = { };
        storage.nodes = { };
        storage.length = 0;
        storage.first = elements[0];
        storage.last = elements[length - 1];
        while (length > i) {
            c = elements[i];
            if ((k = c.id) == $id) {
                nodes[nodes.length] = c;
                if (storage.nodes[k]) {
                   k = c.id + '*' + (++j);
                }
            }
            i++;
            storage.nodes[k] = c;
            storage.length++;
        }
        arguments.callee.storage = storage;
    }
    return nodes;
}
0 голосов
/ 12 июля 2010

Большинство веб-браузеров обрабатывают атрибут "id" как специальный атрибут, который предназначен для поиска в одном хеше.Вы не должны назначать один и тот же идентификатор нескольким элементам.

Я бы рекомендовал назначить другой атрибут, возможно, "widget_id".

После того, как вы это сделаете, вы можете перечислить все элементы с помощьюданный "widget_id" через:

$(div[widget_id="tooltip-content"]);
...