Array.prototype.slice
returns part of an array, а также может использоваться для convert host objects like NodeList
to arrays. Самый короткий способ назвать это будет [].slice.call(arrayLikeObject, begin, end)
. Оба begin
и end
являются индексами на основе нуля, а элемент в end
не включен.
Таким образом, чтобы получить все, что от второго элемента к четвертому элементу, вы могли бы назвать:
[].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 example.)
Примечание: этот подход не будет работать в IE 8 и ниже (или более старые браузеры BlackBerry), потому что они не позволят вам позвонить Array.prototype.slice
по адресу NodeList
. Если вам необходимо поддерживать эти браузеры, ваша лучшая надежда - это подход try-catch, вдохновленный реализацией jQuery toArray
. Первая попытка:
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);
}
}
'document.getElementsByTagName ('thetag')' дает вам все возникновения тега 'thetag'. Что такое путаница? – karthikr
Проблема в том, что я хочу выбрать три элемента в одном предложении, а javascript не разрешает такие вещи, как «[1-3]» – user101579