Самы кароткі сцэнар для шматразовага document.getElementsByTagName ( «») thetag выбараў?

Ці магу я выбраць некалькі элементаў з адным document.getElementsByTagName ( 'thetag' )?

як:

 document.getElementsByTagName('thetag')[1-3]

замест:

document.getElementsByTagName('thetag')[1]
document.getElementsByTagName('thetag')[2]
document.getElementsByTagName('thetag')[3]
0
<�Код> document.getElementsByTagName ( 'thetag') дае вам усё пра месцы дзе тэга thetag . Што такое замяшанне?
дададзена аўтар karthikr, крыніца
Праблема заключаецца ў тым, што я хачу, каб выбраць тры элемента ў адным сказе і Javascript не дазваляе такія рэчы, як "[1-3]
дададзена аўтар user101579, крыніца
Праблема заключаецца ў тым, што я хачу, каб выбраць тры элемента ў адным сказе і Javascript не дазваляе такія рэчы, як "[1-3]
дададзена аўтар user101579, крыніца

9 адказы

Захаваць вынік getElementsByTagName тэлефануйце ў зменнай:

var theTags = document.getElementsByTagName("thetag");
theTags[1]
theTags[2]
theTags[3]
3
дададзена

Захаваць вынік getElementsByTagName тэлефануйце ў зменнай:

var theTags = document.getElementsByTagName("thetag");
theTags[1]
theTags[2]
theTags[3]
3
дададзена

Мне здаецца, што ОП спрабуе нешта ўздоўж ліній, што прапануе JQuery, у тым, што вы можаце выбраць некалькі элементаў, а затым прымяніць змены да гэтага выбару. Адзіны спосаб дамагчыся гэтага, каб закадаваць свой уласны апрацоўшчык для гэтага, або выкарыстаць бібліятэку як JQuery.

Ніжэй у якасці прыкладу структуры, яна, відавочна, можа быць палепшана і пашырана ў многіх адносінах, але, па меншай меры, паказвае асновы таго, як дасягнуць такой сістэмы.

<script>
  var selection = (function(){
    var list = [], constructor = function(){
      if ( !(this instanceof constructor) ){return new constructor;};
    };
    constructor.prototype.each = function(method){
      for(var i=0,l=list.length;ia
b
c

Атрыманне вышэй працы з JQuery, аднак, даволі проста, з значна большай сілай і гнуткасцю:

jQuery('a').slice(0,2).html('example');
1
дададзена
Я думаю, што гэта лепшы адказ на гэтае пытанне. OP не ясна, што ён хоча, каб <�я> зрабіць з абраным тэгам; здагадка пра тое, што ён хоча нешта падобнае на jQuery з'яўляецца разумным.
дададзена аўтар Jordan Gray, крыніца
var tags = Array.prototype.slice.call(document.getElementsByTagName("thetag"),1, 4);
0
дададзена
var tags = Array.prototype.slice.call(document.getElementsByTagName("thetag"),1, 4);
0
дададзена

Array.prototype.slice returns part of an array, and can also be used to convert host objects like NodeList to arrays. The shortest way to call it would be [].slice.call(arrayLikeObject, begin, end). Both begin and end are zero-based indexes, and the element at end is not included.

Такім чынам, каб атрымаць усё, што ад другога элемента да чацвёртага элемента, вы маглі б назваць:

[].slice.call(document.getElementsByTagName('tag'), 1, 4)

Калі вы збіраецеся рабіць гэта шмат, вы можаце напісаць яго як функцыю:

document.getElementsByTagNameSlice = function(tag, begin, end) {
    return [].slice.call(document.getElementsByTagName(tag), begin, end);
}

// Call: document.getElementsByTagNameSlice('p', 1, 4);

( jsFiddle прыклад .)


Note: this approach won't work in IE 8 and below (nor older BlackBerry browsers) because they won't allow you to call Array.prototype.slice on a NodeList. If you need to support those browsers, your best hope is a try-catch approach inspired by jQuery's toArray implementation. A first attempt:

try {
    Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType;
} catch(e) {
    document.getElementsByTagNameSlice = function(tag, begin, end) {
        var tags = document.getElementsByTagName(tag),
            arr = [];

        for (var i = 0; tags[i]; i++) {
            arr[i] = tags[i];
        }

        arr.slice(begin, end);
    }
}
0
дададзена
Так, я павінен. Звычайна я б зрабіў так, не ведаю, чаму я забыўся на гэты раз!
дададзена аўтар Jordan Gray, крыніца
Варта адзначыць, што гэта адбудзецца збой у IE8 і ніжэй.
дададзена аўтар user1106925, крыніца

Array.prototype.slice returns part of an array, and can also be used to convert host objects like NodeList to arrays. The shortest way to call it would be [].slice.call(arrayLikeObject, begin, end). Both begin and end are zero-based indexes, and the element at end is not included.

Такім чынам, каб атрымаць усё, што ад другога элемента да чацвёртага элемента, вы маглі б назваць:

[].slice.call(document.getElementsByTagName('tag'), 1, 4)

Калі вы збіраецеся рабіць гэта шмат, вы можаце напісаць яго як функцыю:

document.getElementsByTagNameSlice = function(tag, begin, end) {
    return [].slice.call(document.getElementsByTagName(tag), begin, end);
}

// Call: document.getElementsByTagNameSlice('p', 1, 4);

( jsFiddle прыклад .)


Note: this approach won't work in IE 8 and below (nor older BlackBerry browsers) because they won't allow you to call Array.prototype.slice on a NodeList. If you need to support those browsers, your best hope is a try-catch approach inspired by jQuery's toArray implementation. A first attempt:

try {
    Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType;
} catch(e) {
    document.getElementsByTagNameSlice = function(tag, begin, end) {
        var tags = document.getElementsByTagName(tag),
            arr = [];

        for (var i = 0; tags[i]; i++) {
            arr[i] = tags[i];
        }

        arr.slice(begin, end);
    }
}
0
дададзена
Так, я павінен. Звычайна я б зрабіў так, не ведаю, чаму я забыўся на гэты раз!
дададзена аўтар Jordan Gray, крыніца
Варта адзначыць, што гэта адбудзецца збой у IE8 і ніжэй.
дададзена аўтар user1106925, крыніца

Array.prototype.slice returns part of an array, and can also be used to convert host objects like NodeList to arrays. The shortest way to call it would be [].slice.call(arrayLikeObject, begin, end). Both begin and end are zero-based indexes, and the element at end is not included.

Такім чынам, каб атрымаць усё, што ад другога элемента да чацвёртага элемента, вы маглі б назваць:

[].slice.call(document.getElementsByTagName('tag'), 1, 4)

Калі вы збіраецеся рабіць гэта шмат, вы можаце напісаць яго як функцыю:

document.getElementsByTagNameSlice = function(tag, begin, end) {
    return [].slice.call(document.getElementsByTagName(tag), begin, end);
}

// Call: document.getElementsByTagNameSlice('p', 1, 4);

( jsFiddle прыклад .)


Note: this approach won't work in IE 8 and below (nor older BlackBerry browsers) because they won't allow you to call Array.prototype.slice on a NodeList. If you need to support those browsers, your best hope is a try-catch approach inspired by jQuery's toArray implementation. A first attempt:

try {
    Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType;
} catch(e) {
    document.getElementsByTagNameSlice = function(tag, begin, end) {
        var tags = document.getElementsByTagName(tag),
            arr = [];

        for (var i = 0; tags[i]; i++) {
            arr[i] = tags[i];
        }

        arr.slice(begin, end);
    }
}
0
дададзена
Так, я павінен. Звычайна я б зрабіў так, не ведаю, чаму я забыўся на гэты раз!
дададзена аўтар Jordan Gray, крыніца
Варта адзначыць, што гэта адбудзецца збой у IE8 і ніжэй.
дададзена аўтар user1106925, крыніца

Гэта функцыя будуе масіў падмноства вузлоў, якія вы хочаце.

function getNodeListSubset(nodelist, start, end){
    var arr = [];
    for(var i = 0; i < nodelist.length && i <= end; i++){
        if (i >= start){
            arr.push(nodelist[i]);
        }
    }
    return arr;
}

Прыклад выкарыстання:

var subset = getNodeListSubset(document.getElementsByTagName('thetag'), 1, 3);
0
дададзена