str.split('')在可编辑div中的不同行为

时间:2012-07-14 23:53:42

标签: javascript split contenteditable

我注意到这种“有趣”的行为。假设您有一个<div id="editableDiv" contenteditable="true"></div>

并且你想得到它的值(在这种情况下,假设你的值类似于'hello'(带有尾随空格)。Afterwars,你想使用split()将该字符串转换为数组:

var string = window.getSelection().anchorNode.data // hello_ (_ means whitespace)
var myArray = string.split(' ') // ['hello '] -> includes whitespace!

但是,当您操纵字符串而不必通过可编辑的div获取该值时,一切都正常。

为什么以及如何强制尾随空格在结果数组(['hello', ''])中生成另一个空值?

由于

2 个答案:

答案 0 :(得分:3)

问题是来自可编辑div的尾随空格似乎是字符160,它是一个不间断的空间,而不是字符32,它是一个“正常”空间。您可以通过拆分匹配“普通”空格字符160的正则表达式来解决此问题,如下所示:

var string = window.getSelection().anchorNode.data;
var myArray = string.split(/ |\u00A0/);
console.log(myArray);

演示:http://jsfiddle.net/zgXUp/2/

答案 1 :(得分:0)

在拆分之前检查字符串是否有空格,如果是,则正常拆分并将其添加到包含空格的数组中..

...
var splitted;
var array[];
String whitespace = "";
if(string.contains("")){
  splitted = string.split("");
  array.insert(splitted,whitespace);
 }
array.insert(splitted);

代码只是来自我的幻想,我不是编码大师,但你可以吗?