缩短DOMRect的数组

时间:2016-02-25 15:20:25

标签: javascript

如何缩短rects(例如1)?

<script>
function rectTest(elID) {
  var rects = document.getElementById(elID).getClientRects();        
  alert(rects.length);  // 7
  rects.length =  1; 
  alert(rects.length);  // 7 ???
} 
</script>

<div id="containter1" contentEditable = true style="...">
  <span id="me">Donec tempus, nisi a pharetra placerat.</span>
</div>

<button onclick="rectTest('me')">rectTest</button>

3 个答案:

答案 0 :(得分:1)

Element.getClientRects()返回ClientRectListlength的{​​{1}}属性不可写,而不是length property of an array

可以使用Object.getOwnPropertyDescriptor()找到属性的可写性。例如,尝试在控制台中运行这些命令:

ClientRectList

并将其与:

进行比较
var x = document.body.getClientRects();
Object.getOwnPropertyDescriptor(x.constructor.prototype, 'length');
// Yields: "Object {set: undefined, ..."
// Undefined setter

因此,var x = [1, 2, 3, 4]; Object.getOwnPropertyDescriptor(x.constructor.prototype, 'length'); // Yields: "Object {value: 0, writable: true, ..." // Writable: true. It's writable. 与数组不同。那么我们怎么能改变它以便我们可以像数组一样使用它呢?

没有参数调用的

Array.prototype.slice返回数组的副本。我们可以利用这个优势。 (ClientRectList拥有x):

ClientRectList

现在,您可以将x = Array.prototype.slice.call(x); // Yields an array of ClientRects 视为普通数组:修改长度,调用x,调用splice,无论您需要做什么。

快乐的编码!

答案 1 :(得分:0)

splice是您正在寻找的解决方案:

rects = rects.splice(0,1);

http://www.w3schools.com/jsref/jsref_splice.asp

拼接需要两个参数:(startdeleteCount)。

start是您要从中删除的偏移量。 JavaScript数组中的第一个偏移量为0,最后一个偏移量为(rects.length-1)

deleteCount是要删除的正方向的元素数。如果不包含,该函数将在给定的偏移量之前拼接所有元素。

答案 2 :(得分:0)

切片

var rects = document.getElementById(elID).getClientRects().slice(0,1);