Javascript 在另一个div上显示溢出文本的部分
HTMLJavascript 在另一个div上显示溢出文本的部分,javascript,html,overflow,Javascript,Html,Overflow,HTML 测试。。。试验 JAVASCRIPT <div id="element1"><p id="hello">test test test test ... test test test test</p></div> <div id="element2"><p></p></div> var-element=document.querySelector('#element1'); if((el
测试。。。试验
JAVASCRIPT
<div id="element1"><p id="hello">test test test test ... test test test test</p></div>
<div id="element2"><p></p></div>
var-element=document.querySelector('#element1');
if((element.offsetHeight
我使用这个简单的javascript来检测我的段落中是否有文本溢出(高度是固定的)。但更具体地说,我想做的是,如果scrollheight大于offsetheight,则在另一个
上显示溢出部分的文本。(在本例中为element2)。javascript不应该很难,是吗?我在网上没有看到过类似的情况,也不可能理解这个问题……将我的评论转换成一些代码:
- 将要拆分的文本存储到变量中
- 将文本拆分为若干部分(单词)
- 将逐字添加到第一个div,直到它已满
- 然后将以下单词添加到另一个div
var element = document.querySelector('#element1');
if( (element.offsetHeight < element.scrollHeight) || (element.offsetWidth < element.scrollWidth)){
// my element have overflow
element.style.background = "yellow";
}
else{
//my element don't have overflow
}
函数addWord(word){
//查询要测量的div和包含的段落
const element1=document.querySelector('#element1');
常量p1=元素1.查询选择器('p');
const element2=document.querySelector('#element2');
常量p2=element2.querySelector('p');
//测试div是否已满
if((element1.offsetHeight
我的答案在很大程度上基于Fuzzzel的聪明想法,即迭代每个单词并将它们添加到第一个元素中,直到溢出为止。一般来说,这样的过程非常缓慢,会影响用户体验(如果文本有10000个单词会怎么样),但这是我能想到的唯一可能的方法
我的答案有什么不同:
function addWord(word) {
// Query the divs to measure and the containing paragraph
const element1 = document.querySelector('#element1');
const p1 = element1.querySelector('p');
const element2 = document.querySelector('#element2');
const p2 = element2.querySelector('p');
// Test if the div is full
if ((element1.offsetHeight < element1.scrollHeight) || (element1.offsetWidth < element1.scrollWidth)) {
// If full, add the text to second div
p2.innerHTML += ' ' + word;
} else {
// If not full add the text to first div
p1.innerHTML += ' ' + word;
}
}
// Execute this part after your DOM is loaded
// Query text you want to put into the two divs
let text = document.querySelector('#element1 p').innerHTML;
// Split the text into words (roughly)
let words = text.split(' ');
// Empty the text you just loaded
document.querySelector('#element1 p').innerHTML = '';
// Add the text to the divs word by word
for (let i = 0; i < words.length; i++) {
addWord(words[i]);
}
填充
,如果元素已满,则不会插入其他单词,而Fuzzzzel则不会,如图所示textContent
,这是在HTML
节点中获取和设置文本的更快方法,因为它不尝试解析HTML
function addWord(word) {
// Query the divs to measure and the containing paragraph
const element1 = document.querySelector('#element1');
const p1 = element1.querySelector('p');
const element2 = document.querySelector('#element2');
const p2 = element2.querySelector('p');
// Test if the div is full
if ((element1.offsetHeight < element1.scrollHeight) || (element1.offsetWidth < element1.scrollWidth)) {
// If full, add the text to second div
p2.innerHTML += ' ' + word;
} else {
// If not full add the text to first div
p1.innerHTML += ' ' + word;
}
}
// Execute this part after your DOM is loaded
// Query text you want to put into the two divs
let text = document.querySelector('#element1 p').innerHTML;
// Split the text into words (roughly)
let words = text.split(' ');
// Empty the text you just loaded
document.querySelector('#element1 p').innerHTML = '';
// Add the text to the divs word by word
for (let i = 0; i < words.length; i++) {
addWord(words[i]);
}
知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责
如果以javascript获取字符串,则可以逐字填充第一个div(例如,在将原始字符串按空格拆分后),并在添加每个单词后检查您的条件。一旦条件满足,你就把下面的单词添加到另一个div中。非常有趣。。。我今天将尝试在我的php=)中实现这个想法,理论上听起来很好,但我无法让它工作..我收到一些“无法读取null属性'innerHTML'”错误。元素2中没有p标记,因此它可能无法工作,由于addWord添加到element2中的第一个p-tag中,因此我将您的想法精心设计成了我自己的答案,提供了一种稍微不同的方法。我一定会为你的出色工作提供赞誉和赞誉@fuzzel你是个天才。我勾选Angel的答案是为了帮助我的人。我认为他的方法对于大内容来说要快得多。但这太不公平了。你演得很聪明。尊敬老兄!这对我来说是个大问题。如果你有贝宝或类似的,我会非常乐意为你买啤酒!来自LDNTrue的欢呼声,textContent属性更快,正如您所说的,导致容器溢出的第一个单词应该已经添加到下一个容器中。我没有考虑到这一点。所以你的答案是更好/更好的。最快的方法很可能是使用CSS列在多个容器之间划分文本,但没有要求这样做;-)然而,这不是关于速度的优化,而是另外两个建议:1。在第一个单词不适合之后,在内部连接剩余的字符串并将其添加到第二个容器中。此解决方案跳过任何DOM操作,但第二个容器的操作除外。2.或者,以补偿的方式这样做。函数尝试添加给定的文本。如果不合适,将其分成两半,并将第一部分放在同一个函数中:。如果它确实合适,那么在下半场也要这样做。将适合的零件保存在容器内存中或从函数中返回。这总是需要最大的sqrt(n)次尝试。对不起,不能是sqrt(n)而是log2(n)。哇,伙计们,我印象深刻!这太神奇了。我在谷歌上翻了很多,想找到类似的东西。。非常感谢,我学到了一些东西!我很高兴你找到了解决问题的有效方法@Odjone。没有Fuzzel是不可能做到的!确保再次检查答案中的代码。我在p1.textContent=p1final.join(“”)下添加了一行代码,因为