----------------------------------------------------
| This is my text inside a div and I want the overf|low of the text to be cut
----------------------------------------------------
请注意我希望删除溢出,因此CSS省略号属性对我不起作用。所以基本上,我希望上面的文字看起来像这样:
----------------------------------------------------
| This is my text inside a div and I want the overf|
----------------------------------------------------
纯JavaScript如何实现这一目标?
修改
我需要一个JavaScript函数来裁剪文本,因为我需要计算可见文本的字符。
答案 0 :(得分:6)
好的,我没有看到问题的附录。虽然我之前曾说过使用JavaScript和不是固定宽度的字体不可能做到这一点......实际上 是可能的!
您可以将每个角色包裹在<span>
中,并找到超出父级边界的第一个<span>
。类似的东西:
function countVisibleCharacters(element) {
var text = element.firstChild.nodeValue;
var r = 0;
element.removeChild(element.firstChild);
for(var i = 0; i < text.length; i++) {
var newNode = document.createElement('span');
newNode.appendChild(document.createTextNode(text.charAt(i)));
element.appendChild(newNode);
if(newNode.offsetLeft < element.offsetWidth) {
r++;
}
}
return r;
}
答案 1 :(得分:3)
您可以使用Javascript执行此操作。这是一个计算元素中可见字符数的函数,无论外部css表和应用于元素的内联样式如何。我只在Chrome中测试过,但我认为它是跨浏览器友好的:
function count_visible(el){
var padding, em, numc;
var text = el.firstChild.data;
var max = el.clientWidth;
var tmp = document.createElement('span');
var node = document.createTextNode();
tmp.appendChild(node);
document.body.appendChild(tmp);
if(getComputedStyle)
tmp.style.cssText = getComputedStyle(el, null).cssText;
else if(el.currentStyle)
tmp.style.cssText = el.currentStyle.cssText;
tmp.style.position = 'absolute';
tmp.style.overflow = 'visible';
tmp.style.width = 'auto';
// Estimate number of characters that can fit.
padding = tmp.style.padding;
tmp.style.padding = '0';
tmp.innerHTML = 'M';
el.parentNode.appendChild(tmp);
em = tmp.clientWidth;
tmp.style.padding = padding;
numc = Math.floor(max/em);
var width = tmp.clientWidth;
// Only one of the following loops will iterate more than one time
// Depending on if we overestimated or underestimated.
// Add characters until we reach overflow width
while(width < max && numc <= text.length){
node.nodeValue = text.substring(0, ++numc);
width = tmp.clientWidth;
}
// Remove characters until we no longer have overflow
while(width > max && numc){
node.nodeValue = text.substring(0, --numc);
width = tmp.clientWidth;
}
// Remove temporary div
document.body.removeChild(tmp);
return numc;
}
答案 2 :(得分:2)
试试这个,如果可以,你需要一个固定的宽度:http://jsfiddle.net/timrpeterson/qvZKw/20/
HTML:
<div class="col">This is my text inside a div and I want the overf|low of the text to be cut</div>
CSS:
.col {
width:120px;
overflow: hidden;
white-space:nowrap;
}
答案 3 :(得分:2)
您正在尝试将CSS问题强制转换为JavaScript。把锤子拿走,拿出一把螺丝刀。 http://en.wiktionary.org/wiki/if_all_you_have_is_a_hammer,_everything_looks_like_a_nail
如果退后一步,解决字符数的答案可能无关紧要。最后一个字符可能只是部分可见,并且字体数量在字体大小变化,W和i之间的宽度差异等方面完全不同。可能div的宽度比真正问题中的字符数更重要。
如果您仍然坚持找出可见的字符,请在文本周围的div内放一个span,使用此问题的其他答案中提供的css,然后在JavaScript中一次修剪一个字符直到跨度的宽度小于div的宽度。然后观察每次你执行大段时你的浏览器会冻结几秒钟。
答案 4 :(得分:0)
.col { width:40px; overflow: hidden; white-space:nowrap; }
白色空间:nowrap;当内容有空格时需要。
无论哪种方式,单行中的长单词都不会出现。 http://jsfiddle.net/h6Bhb/