从javascript中的未知对象创建新实例
making the new instance from unknown Object in javascript
我是Javascript的新手。我面临着不愉快的情况,其中"每个浏览器"对同一件事使用不同的对象类 - DOMRectList(在Firefox中)= TextRectangleList(在IE中)= ClientRectList(在Chrome中)。所以我尝试编写代码,我想根据适当的类集合创建新实例,例如 nRect,这是特定 ...列表对象。我尝试了几种方法,但没有任何效果。下面是示例:
<style>
div.cont {
position:absolute;
top:10px;
border:3px solid #093;
height:205px;
width:100px;
word-wrap: break-word;
overflow:hidden;
font-family:"Times New Roman", Times, serif;
font-size:12px;
}
</style>
function MergeClientRects(elID){
var result = [];
xRects = document.getElementById(elID).getClientRects();
alert ('ClientRect.constructor is ' + xRects.constructor);
// Firefox : DOMRectList();
// IE : [object TextRectangleList]
// Chrome : ClientRectList()
for (i = 0; i< xRects.length; i++){
if (xRects[i].top > 5) {
var nRect = xRects[i].getClass().newInstance(); // wrong, but how should it to be written ???
// var nRect =new Object.getPrototypeOf(xRects[i]).create(); // wrong too
result.push(nRect);
}
}
return result;
}
<div id="containter1" class="cont" contentEditable ="true">
<span id="me" style="font-style:italic; font-size:12px;">Donec tempus, nisi a pharetra placerat, diam nisi aliquam elit, a consectetur magna enim sed ligula. </span>
</div>
<button onclick="MergeClientRects('me')">Process rects</button>
感谢
尝试用
for..in
循环代替for
循环;删除html
t rue
contentEditable
属性值处的空格。
请注意,使用 Element.getBoundingClientRect()
和 Element.getClientRects() 之间返回的值相差大约 1px
。无法使用 new
运算符创建 Element.getBoundingClientRect()
或 Element.getClientRects()
的新实例。另请参阅 CSSOM 视图模块 。
function MergeClientRects(elID) {
var result = [];
var xRects;
var el = document.getElementById(elID);
var xRects = el.getClientRects()[0];
for (var prop in xRects) {
if (prop === "top" && xRects[prop] > 5) {
var nRect = xRects[prop];
result.push(nRect);
}
}
console.log(result)
return result;
}
<div id="containter1" contentEditable="true">
<span id="me" style="font-style:italic; font-size:12px;">Donec tempus, nisi a pharetra placerat, diam nisi aliquam elit, a consectetur magna enim sed ligula. </span>
</div>
<button onclick="MergeClientRects('me')">Process rects</button>
相关文章:
- 显示模块模式在Knockout中设置模型的新实例
- 如何基于数组值创建新实例
- VS2010 javascript调试器希望在VS2010的新实例中启动
- 将新类实例中的数据存储在数组中
- Web服务器意外退出,正在重新启动新实例
- JavaScript - 有没有办法动态创建对象的新实例
- Jquery类选择器无法选择用.append()添加的新类实例
- 创建新日期实例时的奇怪行为
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- CKEditor新实例始终处于卸载状态
- Javascript - 如何创建新的函数实例
- JavaScript中Var类型的新实例
- jQueryFileTree如何清除实例、重新实例化新实例或刷新
- angular.injector在每次调用时返回新的服务实例
- 每次使用角度控制器都会创建一个新的if实例
- 使用模块模式时,如何创建对象的新实例
- 使用动态函数名编写Javascript新对象实例
- Reset All按钮从JS literal添加一个新的实例jQuery
- 当一次将事件绑定到多个元素时,每个元素都有新的实例
- Angular 2 RC5的组件级提供商每次都会获得新的实例