2013-07-29 100 views
-2

的内容说我有以下HTML:更改DOM文本节点

<div>Some text</div> 

我想从文本中的每个用户点击退格键删除时的最后一个字符。有没有办法从文本节点中实际删除一个字符?或者我必须做些什么,比如obj.innerText = 'Some tex'(即修剪最后一个字符并替换整个东西)。

+0

你应该看看几个框架/库,这些类型的视图模型绑定可以在http://angularjs.org/或http://knockoutjs.com/中找到。 – Ken

+1

你有没有试过['contenteditable'](https://developer.mozilla.org/en-US/docs/Web/HTML/Content_Editable)? –

回答

0

我能想到的最好的方法就是使用字符串的substring方法。

var s = obj.innerText 

// Then On backspace event listener 
s = s.substring(0, s.length - 1) // returns s without the last character in the original string. 

obj.innerTezt(s) // set the inner HTML back to s 

编辑:谢谢乔纳森,丹尼斯对这个答案的更正!

+3

你有基本的想法,但有几个问题:1)['textContent'](https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent)是标准化的属性,将需要与'innerText'混合以获得传统支持。 2)'s'不是'obj.innerText'的*指针*;这是一个副本。设置它不会影响'obj.innerText'(或'obj.textContent')。 –

+0

好的,赶上!你是对的乔纳森 - 我错过了最后一点,他必须得到子字符串后,再次设置innerText/innerHTML! – 2013-07-29 03:08:14

+1

'innerHTML'不是一个函数 – Dennis

0
var div = document.getElementById('my-div'); 
document.addEventListener('keydown', 
    function(e) { 
     if (e.which === 8) { 
      div.textContent = div.textContent.substring(0, div.textContent.length - 1); 
     } 
    }, false); 

您可能还想支持IE8。在这种情况下,使用document.attachEvent()和div.innerText。