提问者:小点点

计数span元素每行中的字符数


假设我有一个/code>标记,其中包含一些文本。Span节点还可以具有子节点(strong,em)标记。我可以通过使用轻松地将跨度拆分为包装好的行。但是,这样做的问题是,我无法跟踪每行中的字符数(我需要)。我尝试将每个单词放入标记中,然后比较每行和单词的top值,以计算一行中的总字符数。一旦主跨度内有其他节点,解决方案就停止工作。因为将单词放入/code>中会删除其他子项的上下文。获取所有子节点并对其进行修改的解决方案似乎非常无效。

期待着有什么想法。

示例SPAN:

<span style="font-size:22pt;line-height:1;">
   <strong>
     Qui
     <em>
         <u>
            <s>
               squ
            </s>
         </u>
     </em>
     e ac justo pulvinar, efficitur odio nec, convallis ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum ex tortor, pretium ac sapien sed, condimentum fringilla elit. Fusce aliquam ullamcorper magna eget dignissim. In porttitor nec magna non auctor. Nullam feugiat ultrices molestie. 
     </strong>
</span>

共1个答案

匿名用户

您可以使用childNodes并通过将文本拆分成行来使用循环计数how字符:

null

var i = 1;
document.querySelector('span').childNodes.forEach(function(ele, idx) {
    if (ele.nodeType == Node.TEXT_NODE || ele.nodeType == Node.ELEMENT_NODE) {
        var lines = ele.textContent.trim().split('\n');

        lines.forEach(function(l) {
            if (l.trim().length>0)
                console.log('on line n. ' + i++  + ' there are ' + l.trim().length + ' chars');
        })
    }
});
<span style="font-size:22pt;line-height:1;">
   <strong>
       Qui
       <em>
           <u>
               <s>
                   squ
               </s>
           </u>
       </em>
       e ac justo pulvinar, efficitur odio nec, convallis ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum ex tortor, pretium ac sapien sed, condimentum fringilla elit. Fusce aliquam ullamcorper magna eget dignissim. In porttitor nec magna non auctor. Nullam feugiat ultrices molestie.
   </strong>
</span>