我正在尝试获取div中文本行的总数,并且向我建议我可以将div的display属性设置为inline,并且返回的clientRects的数量将等于文本行。但是,我需要在div上使用绝对定位,当我这样做时它不起作用。
以下是此问题的示例:http://jsfiddle.net/cu5kb/
var x = document.createElement("div");
x.style.display = "inline";
x.style.whiteSpace = "pre-line";
x.style.position = "absolute";
var y = document.createTextNode("Text \n text");
x.appendChild(y);
而不是2个rects,我得到1:
x.getClientRects()。length === 1
我有办法解决这个问题吗?
答案 0 :(得分:1)
<强>更新强>
CSS 2.1中有3 positioning schemes
Docs says,getClientRects
仅适用于内联元素,仅适用于正常流量。其他方案使其阻止或至少将其视为docs says
但是对于块元素,[browser]将只返回一个矩形。
答案 1 :(得分:0)
如果设置每个div的类名,那么div在DOM中的位置无关紧要,定位与选择div无关。
querySelectorAll
从Dom 你可以在这里找到你的小提琴:http://jsfiddle.net/cu5kb/10/
var textArrayTest = ["Text \n text", "Text \n text \nText \n text", "Text \n text\nText \n text \nText \n text"];
for (var i = 0; i < textArrayTest.length; i++) {
var x = document.createElement("div");
x.style.position = "absolute";
x.style.left = '0';
x.style.top = (i * 100) + 'px';
x.className += 'textDivs';
x.appendChild(document.createTextNode(textArrayTest[i]));
document.body.appendChild(x);
};
var getLines = function()
{
var divHeight = this.offsetHeight;
var lineHeight = parseInt(this.style.lineHeight);
var lines = divHeight / lineHeight;
}
setTimeout(function () {
var processText = function () {
var textDivs = document.body.querySelectorAll('.textDivs'),
msg = '';
for (var i = 0; i < textDivs.length; i++) {
msg +='Number ' + (i + 1) + ' div has ' + getLines.call(textDivs[i]) + ' lines of text.\n\n';
};
alert(msg);
}();
}, 2000);