Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取p标记行中的字符数?_Javascript_Css - Fatal编程技术网

Javascript 获取p标记行中的字符数?

Javascript 获取p标记行中的字符数?,javascript,css,Javascript,Css,我有一些文本,我想把其中的一部分放在标记中 HTML: JavaScript: var text=“我的知识产权属于我的知识产权,我的知识产权属于我的知识产权,我的知识产权属于我的知识产权,我的知识产权属于我的知识产权。” var mainTargetP=document.getElementById('mainTargetP'); //mainTargetP.innerHTML=将部分文本转换为P。 标记已指定宽度、高度、字体大小等 我拥有的是一大块文本,我将其划分为固定宽度和高度的段

我有一些文本,我想把其中的一部分放在
标记中

HTML:

JavaScript:

var text=“我的知识产权属于我的知识产权,我的知识产权属于我的知识产权,我的知识产权属于我的知识产权,我的知识产权属于我的知识产权。”
var mainTargetP=document.getElementById('mainTargetP');
//mainTargetP.innerHTML=将部分文本转换为P。
标记已指定宽度、高度、字体大小等

我拥有的是一大块文本,我将其划分为固定宽度和高度的段落。我必须弄清楚的是,文本块中有多少文本(多少单词)能很好地放在段落中。假设段落有7行,我想正好放进7行文本。不是6.5行,不是7.5行。可能吗

基本上,我不希望在最后一行留下任何空白,如下所示:

使用某些文本块的临时解决方案:

var charsInLine=63;
变量行=7
var charsintagetp=charInLine*行-20;
var mainTargetP=document.getElementById('mainTargetP');
var s1=text.substring(0,CharsInTargetTP);
变量nextPara=s1.lastIndexOf(“”)
mainTargetP.innerHTML=s1.substring(0,nextPara);
高于我随机取的-20值。有时该值需要为-40


希望我说的很清楚,谢谢。

我想到的最直接的方法是暂时将段落的高度设置为
auto
,在其中放入一个字符,测量其高度,然后继续添加字符,直到高度突然增加,表明该段落已换行。然后删除单个字符(或单词,无论什么),直到高度返回其原始值,然后再次设置高度(因为您说过高度已定义)。漂洗,重复以下几行(因为它们不会有相同的字符数,除非您使用固定宽度字体)。

下面是基于jQuery的解决方案

HTML:

JS:

var text=“知识产权是一种权利,是一种权利,是一种权利,是一种权利,是一种权利。知识产权是一种权利,是一种权利,是一种权利,是一种权利。”;
//元素,该元素将附加到每个p标记的末尾,并将导致换行
var justify=‘非常长的东西’;
var p=$('.target');
var q=$('

”); q、 css('width',p.width()+'px'); q、 文本(文本); $(document.body).append(q); var h=p.高度(); var newText=文本; 对于(变量i=0,j=0;ih){ newText=newText.substr(0,newText.lastIndexOf(“”)); q、 文本(新文本); } $(p[i]).html(newText+justify); j+=新文本长度+1; newText=text.substr(j); q、 html(newText); } q、 分离();

工作示例:

@user161179:除非你在IE上执行数百行操作,否则我不认为会有问题,但唯一确定的方法是在你的目标浏览器上尝试。刚做了,这个解决方案就运行得很好。而且绝对不会影响性能。谢谢,仅仅截断大文本并使用CSS隐藏和传输就足够了吗使用
max height
text align:justify
将文本设置为适合容器元素?请将相关代码也放在此处,我们不能依赖外部来源。
<p class="target font"></p>
<p class="target font"></p><!-- create as many tags as many pages you want -->
.target {
    width: 200px;
    height: 100px;
    border: 1px solid black;
    overflow: hidden;
}

.font {
    font-size: 12pt;
    text-align: justify
}
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. a a a  Nullam nec magna eu dui pharetra bibendum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean at urna mi.";
// element which will be appended to the end of each p tag and will cause line break
var justify = ' <span style="visibility:hidden;">something_very_very_very_long</span>';

var p = $('.target');
var q = $('<p class="font"></p>"');
q.css('width', p.width() + 'px');
q.text(text);

$(document.body).append(q);

var h = p.height();

var newText = text;
for (var i = 0, j = 0; i < p.length; ++i) {
    while (q.height() > h) {
        newText = newText.substr(0, newText.lastIndexOf(' '));
        q.text(newText);
    }
    $(p[i]).html(newText + justify);

    j += newText.length + 1;
    newText = text.substr(j);
    q.html(newText);
}

q.detach();