【发布时间】:2014-09-24 05:53:03
【问题描述】:
我正在使用ReactJS 将文本值呈现到contenteditable DOM 节点中。例如:
var data = [{
value: 'Hello '
},{
value: 'World!'
}];
var component = React.createClass({
render: function () {
var pieces = this.props.data.map(function (piece) {
return (
<span contentEditable="false">
<span contentEditable="true">{piece.value}</span>;
</span>
);
});
return <div contentEditable="true">{pieces}</div>;
}
});
React.renderComponent(<component data={data} />, someContainer);
导致 DOM 看起来像这样(出于多种原因):
<div contenteditable="true">
<span contentEditable="false">
<span contentEditable="true">Hello </span>;
</span>
<span contentEditable="false">
<span contentEditable="true">World!</span>;
</span>
</div>
当用户与这些可编辑的 span 交互时,例如,从第二个到第一个的退格,我可以通过从第一个模型中删除最后一个字符来更新数据,但我需要以某种方式告诉 React 定位光标在第一个span[contenteditable="true"]的末尾
我的问题:
在我的.render() 函数中,我有一个this.state.caretPosition 属性告诉我光标应该在的位置(这只存在于一个组件上)。 render() 应该只返回一个(虚拟)DOM 节点。我如何告诉 ReactJS 将插入符号定位在返回的 DOM 节点中的那个位置?
示例:jsbin
【问题讨论】:
标签: javascript contenteditable reactjs