【问题标题】:Delete char from input using start and end position javascript使用开始和结束位置javascript从输入中删除字符
【发布时间】:2012-12-03 20:35:34
【问题描述】:

我正在尝试通过以下方式从输入中删除文本,但它在 Mozilla 中不起作用,有人可以帮忙吗?
在 IE 中它工作正常。

var start = txt.selectionStart;
var end = txt.selectionEnd;  
var selectedStr = txt.value.toString().substring(start, end);
txt.value = txt.value.toString().replace(selectedStr, "");

【问题讨论】:

  • 你为什么在字符串上调用toString?另外:您是否选择了输入的某些部分?如果是,那么子字符串是否唯一,因为replace 将替换仅第一个匹配项。如果没有:尝试txt.value.substring(0,txt.selectionStart) + txt.value.substring(txt.selectionEnd) 剪切并跳过未选择的输入

标签: javascript input position selection


【解决方案1】:

您似乎正在尝试删除文本输入中的选定文本。您将需要两种不同的方法:一种用于 IE selectionStart 和 selectionEnd 属性的其他浏览器。方法如下:

演示:http://jsfiddle.net/hwG7f/1/

代码:

function deleteSelected(input) {
    input.focus();
    if (typeof input.selectionStart == "number") {
        var start = input.selectionStart,
            end = input.selectionEnd,
            val = input.value;
        if (start != end) {
            input.value = val.slice(0, start) + val.slice(end);
            input.setSelectionRange(start, start);
        }
    } else if (typeof document.selection != "undefined") {
        document.selection.createRange().text = "";
    }
}

【讨论】:

    【解决方案2】:

    Mozilla(和其他浏览器)使用 document.selectionwindow.getSelection() 有不同的实现,因此您需要根据这些方法/属性和旧版支持表调整您的代码。您可以使用许多库来为您标准化。

    这是一个适用于 webkit 的代码示例:

    var selectedStr = '';
    if (window.getSelection) {
        var selectedText = window.getSelection().toString()
    }
    

    【讨论】:

    • @Asad OP 声明代码在 IE 中运行,这是谎言吗?
    • 我不知道这是不是谎言,但暗示document.selection.createRange()selectionStartselectionEnd 的替代品是错误的。
    • 很公平,有很多浏览器需要考虑..但是您关于无法捕获输入选择的说法也是错误的,f.ex:jsfiddle.net/jM4ZY (chrome)
    • 这个答案的主要问题是window.getSelection() 是用于常规 HTML 内容中的选择,而不是用于具有不同选择 API(旧 IE 除外)的输入和文本区域。
    • @大卫:是的。但不在 Firefox、Opera 或 IE 9 中。很遗憾,The spec 对此无话可说。
    【解决方案3】:

    替换值不是解决此问题的正确方法。尝试在选择之前和之后获取字符串块:

    var start = txt.selectionStart;
    var end = txt.selectionEnd;
    txt.value = txt.value.substring(0,start) + txt.value.substring(end);
    

    这是一个演示:http://jsfiddle.net/BuMUu/1/

    【讨论】:

      【解决方案4】:

      SelectionStart 仅适用于 IE9+。

      对不起,你为什么不直接把它设置为“”。


      <input type="text" id="txt" />
      <input type="button" value="Clear" id="clear" />​
      
      function clear() {
          var txt = document.getElementById('txt');
          txt.value = "";
      }
      $('#clear').click(function(){clear()});​
      

      【讨论】:

        【解决方案5】:
        var str = "yourString"
        str = str.substring(1,str.length-1)
        

        【讨论】:

        • 这和这个问题有什么关系?
        猜你喜欢
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多