InnerHTML получает имя Div - PullRequest
1 голос
/ 03 июля 2011

Я пытаюсь получить имя DIV

<div id="test" name="info1" onclick="func(this.name)">This is div 1</div>

но когда я пытаюсь распечатать имя div, используя innerHTML, возвращается как неопределенное. Это может быть сделано, или я делаю что-то не так?

Ответы [ 3 ]

12 голосов
/ 03 июля 2011

Согласно W3Schools a div не может иметь атрибут name, но он может иметь id, class или title. Я думаю, что DOM не распознает атрибут, поэтому не делает его доступным для Javascript.

Я сделал пример здесь , который показывает, title работает и name не работает, как вы описываете.

3 голосов
/ 03 июля 2011

Лучший способ получить атрибут с узла - использовать getAttribute, поскольку непосредственно доступен только небольшой поднабор атрибутов (например, заголовок может быть, а alt - нет).

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

Приведенный ниже код должен правильно передать имя узла функции func:)

<div id="test" name="info1" onclick="func(this.getAttribute('name')">This is div 1</div>

Надеюсь, это поможет.

1 голос
/ 03 июля 2011

Если вы хотите получить имя div, вы должны написать некоторый код, который может получить атрибут от элемента (если вы не заинтересованы в кросс-браузерной поддержке, просто используйте elem.getAttribute)

Например:

    var getAttr = function(ele, attr) {
        var result = ele.getAttribute(attr) || ele[attr] || null, attrs, len;
        if( !result ) {
            attrs = ele.attributes;
            len = attrs.length;
            for(var i = 0; i < len; i++)
               if(attrs[i].nodeName === attr)
                  result = attrs[i].nodeValue;
        }
        return result;
};

Тогда вы могли бы сделать

<div id="test" name="info1" onclick="func(getAttr(this, 'name'))">This is div 1</div>
...