(特定于IE)如何确定输入的文本是否长于输入元素的宽度

恩泽

这是IE特定问题,所有版本。在所有其他浏览器中,当文本溢出时,输入元素的scrollWidth大于输入元素的clientWidth。

有没有办法确定输入字段中的文本已溢出IE中输入元素宽度的键?

以下是检查clientWidth与scrollWidth的简单示例

var myInput = document.body.querySelector('#myInput');
myInput.value = 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem';

function checkInputSize() {
    alert('Client Width: ' + myInput.clientWidth + '\n' +
          'Scroll Width: ' + myInput.scrollWidth);
}
<div>
    <input id="myInput"></input>
</div>

<button onclick="checkInputSize()"
        style="margin-top: 2em;">
    <span>Display Input Size</span>
</button>

我希望有一种更直接的方法来确定上述内容,而无需将样式忠实复制到另一个元素。我知道这可能是“最佳”选择,但我真的想让IE受益,因为它比这更好。

如果我需要复制样式,最好的选择是使用window.getComputedStyle,尽管IE8不支持该功能,这对我来说并不重要。

var getJsStyleName = function(styleName) {
    var firstCharacterRegex = new RegExp('^.');
    styleName = styleName.split('-');
    for (var i = 1; i < styleName.length; i++) {
        styleName[i] = styleName[i].replace(firstCharacterRegex, styleName[i][0].toUpperCase());
    }
    return styleName.join('');
};

var copyComputedStyles = function(toElement, fromElement) {
    var comStyle = window.getComputedStyle(fromElement) );
    for (var i = 0; i < comStyle.length; i++) {
        var styleName = getJsStyleName(comStyle[i]);
        toElement.style[ styleName ] = comStyle[ styleName ];
    }

    return toElement;
}


var inputStyledDiv = copyComputedStyles(document.createElement('div'), inputElement);
里克·希区柯克

我已经检查了IE中使用的确实会溢出输入框且不会溢出输入框的文本中的所有计算样式。所有样式都相同。

一种替代方法是在div中复制输入内容,并查看其clientWidth是否比输入的clientWidth宽。您必须小心在div中复制所有输入的样式。

下面的代码通过myInput进行迭代来做到这一点currentStyle该属性在Chrome中不可用,在这种情况下,它将恢复为您的scrollWidth>clientWidth逻辑。

function checkInputSize() {
  var contents= document.querySelector('#contents');
  var output= document.querySelector('#output');
  var st= myInput.currentStyle;
  if(st) {
    for(var i in st) {
      contents.style[i]= st[i];
    }
    contents.innerHTML= myInput.value;

    output.innerHTML= contents.clientWidth+(contents.clientWidth >= myInput.clientWidth ? ': overflow' : '');
    contents.style.display= 'none';
  }
  else {
    output.innerHTML= myInput.scrollWidth+(myInput.scrollWidth > myInput.clientWidth ? ': overflow' : '');
  }
}

小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何知道输入的edittext文本是否为链接?

如何获得固定宽度的输入单选元素(包括其文本)?

如何确定输入元素的值是否为空(空)

如何使用正则表达式查找输入文本是否为url

如何检查使用tkinter输入的文本是否为int?(python和tkinter)

如何检查输入字段的文本是“是”还是“否”?

LSTM 输入长于输出

如何确定进程是否等待用户输入

如何确定用户是否输入数字?

如何仅通过java脚本检查输入文本是否具有值而不触发其中的提交

是否可以在没有特定元素ID的文本框中输入文本

如何检查按钮的文本是否包含数组的元素?

如何确定.background()是否需要指定Color才能输入.colorName(作为文本修饰符)

找出所选文本是否在输入字段或文本区域内

提交类型的输入宽度小于输入文本的输入宽度

如何使输入元素占据固定宽度元素旁边的可用空间?

尝试返回特定于DOM输入的函数

使用熊猫输入特定于类型的输出

输入元素的宽度行为很神秘

当检查特定的无线电输入时,活动的禁用文本是

如何检查文本输入是否为空

如何确定输入类型?

输入元素文本预测

如何grep输入特定的单词并抓取文本

如何使输入文本字段采用所有可用宽度?

如何修复更改输入范围的文本标签的宽度

如何更改yii2 HTML文本输入宽度

如何在文本输入字段上设置自动宽度/长度?

输入值时如何动态改变文本框的宽度