在元素集合上使用拼接

时间:2015-03-13 18:02:04

标签: javascript

我正在运行此操作以获取HTML表单控件元素的集合

var elem = document.getElementById('display').elements;

我可以运行它来获取一组元素:

var elemgroup = Array.prototype.slice.call(elem,0, 3);

我试图想办法运行一个能够删除和返回元素的拼接功能。据我所知,splice仅适用于数组。有没有办法在类似数组的对象上运行拼接?

3 个答案:

答案 0 :(得分:1)

正如phari指出的那样,该集合是只读的。如果您想要一种方法从任何类似数组的对象中省略某些范围的项目(类似于splice()但不修改原始集合),您可以执行以下操作。

通常,使用创建新的转换数组的操作而不是修改现有数组是一种很好的做法。恕我直言,你不应该使用splice()那么多。



function omit(items, start, count) {
  return Array.prototype.filter.call(items, function(e, i) {
    return i < start || i >= start + count;
  });
}

var els = document.getElementsByTagName('div');

snippet.log(els.length);     // 7

var els2 = omit(els, 1, 3);

snippet.log(els2.length);    // 4
&#13;
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果您使用的是jQuery,可以使用$.makeArray(),希望它能按预期工作。

如果没有,或许可以看一下jQuery源代码,特别是函数&#34; makeArray&#34;和#34; isArraylike&#34;。

源代码here

答案 2 :(得分:0)

表单的elements属性是HTMLFormControlsCollection,它是一个“实时”集合,因此是只读的。如果要修改它,可以先将其复制到数组中:

var elem = document.getElementById('display').elements;
var elemgroup = Array.prototype.slice.call(elem);
elemgroup.splice(0, 1); // or whatever changes you want to make
相关问题