我需要一个函数在<p>
标签内的光标位置插入文本,然后重点关注相同的
我有textarea
的以下代码,但它不适用于<p>
代码:
var front = (txtarea.value).substring(0, caretPos);
var back = (txtarea.value).substring(txtarea.selectionEnd,txtarea.value.length);
txtarea.value = front + text + back;
caretPos = caretPos + text.length;
txtarea.selectionStart = caretPos;
txtarea.selectionEnd = caretPos;
txtarea.focus();
txtarea.scrollTop = scrollPos;
答案 0 :(得分:1)
这是一个执行您所描述的功能的函数,适用于大多数元素标记(<p>
,<div>
,<span>
等等...:
function addTextToElement(element, insertText) {
var originalContent = element.innerHTML;
var selection = document.getSelection();
var range = selection.getRangeAt(0);
var originalStart = range.startOffset;
var originalEnd = range.endOffset;
var front = originalContent.substring(0, originalStart);
var back = originalContent.substring(originalEnd, originalContent.length);
element.innerHTML = front + insertText + back;
}
Step 1: <input type="text" id="contentToAdd" placeholder="Type something here" /> <br/>
Step 2: place cursor / select some text in the p-tag below:
<p contenteditable="true" id="testPTag" style="background-color: cyan">0123456789</p>
<button onclick="addTextToElement(document.getElementById('testPTag'), document.getElementById('contentToAdd').value)">Press me to insert text</button>
<br/>
<p>
标签不是输入文本元素,它们没有selectionStart或selectionEnd属性。但是,您可以使用document.getSelection()
来读取当前选择和所选范围。
此外,这些代码不依赖于.value
属性进行展示,而是依赖.innerHTML
。
在上面的示例中,我还在contenteditable="true"
标记中添加了<p>
,这样您就可以像编辑文本区域一样编辑<p>
标记。这不是必需的,但允许您至少看到光标。
请注意,这在Internet Explorer 9或更早版本上不起作用。
答案 1 :(得分:0)
正如您在HTMLTextAreaElement中所读到的那样,selectionStart
不适用于任何其他HTMLElement。
但您可以使用contenteditable对<p>
元素进行编辑。然后,<p>
的行为类似于textarea
。