Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Аналог функции getElementsByTagName (https://javascript.ru/forum/events/39023-analog-funkcii-getelementsbytagname.html)

Михаил1 12.06.2013 18:06

Аналог функции getElementsByTagName
 
Подскажите пожалуйста как написать аналог функции getElementsByTagName?
Я хочу вместо getElementsByTagName() использовать сокращенный вариант например gt().
Возможно ли это сделать кроссбраузерно?

В нете нашел пример для outerHTML но как им пользоваться незнаю.
if (typeof(HTMLElement) != "undefined") {
    var _emptyTags = {
       "IMG": true,
       "BR": true,
       "INPUT": true,
       "META": true,
       "LINK": true,
       "PARAM": true,
       "HR": true
    };
    HTMLElement.prototype.__defineGetter__("outerHTML", function () {
       var attrs = this.attributes;
       var str = "<" + this.tagName;
       for (var i = 0; i < attrs.length; i++)
          str += " " + attrs[ i ].name + "=\"" + attrs[ i ].value + "\"";
       if (_emptyTags[this.tagName])
          return str + ">";
       return str + ">" + this.innerHTML + "</" + this.tagName + ">";
    });
    HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
       var r = this.ownerDocument.createRange();
       r.setStartBefore(this);
       var df = r.createContextualFragment(sHTML);
       this.parentNode.replaceChild(df, this);
    });
}


Если возможно напишите код с комментариями!:( :( :(

danik.js 12.06.2013 18:15

Херней страдаешь.

<div></div>
<div></div>
<div><span></span><span></span></div>

<script>
function query(selector, context) {
    return (context || document).querySelectorAll(selector);
}

var divs =  query('div');
alert (divs.length);

var spans = query('span', divs[2]);
alert (spans.length);
</script>

Михаил1 12.06.2013 18:25

Ты меня не правильно понял я имел в виду чтобы функция gt() работала примерно так:
document.gt('div').item(0).innerHTML = 'someText';
или
document.getElementById('mid').gt('span').item(0) = 'someText';

danik.js 12.06.2013 18:30

Не трогай прототипы DOM-объектов. Зачем это нужно?

Михаил1 12.06.2013 18:33

Для простоты и скорости в работе.
Когда в сайте нужно раз со 100 использовать функцию getElementsByTagName лучше написать её аналог

danik.js 12.06.2013 19:16

насколько
document.gt('class')
document.getElementById('id').gt('class')

быстрее чем
gt('class')
gt('class', document.getElementById('id'))

или тем более
q('.class')
q('#id .class')

?
А вобще - подключи jQuery и не парься.

Михаил1 12.06.2013 23:32

danik Спасибо!


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