Кросс-браузер, метод getAttribute() javascript?
пытается определить подходящий метод кросс-браузера для получения атрибутов с помощью javascript? использование javascript-библиотеки (jQuery/Mootools/etc.) не является вариантом.
Я пробовал следующее, но часто получаю атрибуты "null" или "нет", если IE пытается использовать метод "else". Может ли кто-нибудь помочь?
<script type="text/javascript">
//...
getAttr: function(ele, attr) {
if (typeof ele.attributes[attr] == 'undefined'){
return ele.getAttribute(attr);
} else {
return ele.attributes[attr].nodeValue;
}
},
//...
</script>
<div>
<a href="#" onclick="location.href='http://www.yo.com#foo'; return false;">Link</a>
</div>
используя вышеуказанный html, в каждом браузере, как мне getAttr (ele, 'href')? (предполагается, что выбор элемента node не является проблемой)
Ответы
Ответ 1
Что касается вашего обновления вопроса, вы можете попробовать это.
Это может быть излишним, но если getAttribute()
и точечная нотация не возвращают результат, он выполняет итерацию через объект attributes
, чтобы попытаться найти соответствие.
Пример: http://jsfiddle.net/4ZwNs/
var funcs = {
getAttr: function(ele, attr) {
var result = (ele.getAttribute && ele.getAttribute(attr)) || null;
if( !result ) {
var attrs = ele.attributes;
var length = attrs.length;
for(var i = 0; i < length; i++)
if(attrs[i].nodeName === attr)
result = attrs[i].nodeValue;
}
return result;
}
};
var result = funcs.getAttr(el, 'hash');
Тем не менее, вам нужно провести кросс-браузерное тестирование.: О)
Используя ele.attributes
, вам необходимо получить к ним доступ по индексу, например:
ele.attributes[0].nodeName; // "id" (for example)
ele.attributes[0].nodeValue; // "my_id" (for example)
Попытка пройти attributes
появляется имя атрибута, возвращающее значение, значение которого typeof
равно object
, поэтому ваш код else
работает, хотя ele.attributes[attr]
не дает вам нужного значения.
Ответ 2
В подавляющем большинстве случаев вы можете просто использовать встроенную функцию getAttribute
.
например.
ele.getAttribute(attr)
Согласно QuirksMode, это должно работать на всех основных браузерах (включая IE >= 6) с небольшим исключением:
В IE5-7 доступ к атрибуту style
дает объект, и доступ к атрибуту onclick
дает анонимную функцию, обернутую вокруг фактического содержимого.
Ответ 3
Вы пытаетесь получить доступ к свойствам элемента ele, прежде чем вы установили, если эти свойства существуют. Попробуйте такую цепочку доказательств:
if (ele.attributes && ele.attributes[attr] && typeof ele.attributes[attr] == 'undefined')
и др.