如何缩短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>
答案 0 :(得分:1)
Element.getClientRects()
返回ClientRectList
。 length
的{{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
拼接需要两个参数:(start
,deleteCount
)。
start
是您要从中删除的偏移量。 JavaScript数组中的第一个偏移量为0
,最后一个偏移量为(rects.length-1)
。
deleteCount
是要删除的正方向的元素数。如果不包含,该函数将在给定的偏移量之前拼接所有元素。
答案 2 :(得分:0)
切片
var rects = document.getElementById(elID).getClientRects().slice(0,1);