如何检查所选文本是否可编辑
How to check if the selected text is editable?
我正在开发一个处理文本选择的Chrome扩展程序。我想检测所选文本是否可编辑。给定 getSelection() 返回的 Select 对象,是否可以检查所选文本是否可编辑?如何?
一个选区可以包含来自多个元素的文本。有些元素可能是可编辑的,有些则不是。
但是,如果您只对选择开始的元素感兴趣,则可以使用
-
Selection.prototype.anchorNode
,返回所选内容开始的Node
。 -
Node.prototype.parentNode
,这应该是选择开始的Element
。最新的浏览器也支持Node.prototype.parentElement
. -
HTMLElement.prototype.isContentEditable
,只读属性返回一个布尔值,如果元素的内容是可编辑的,则true
;否则返回false
。
那是:
getSelection().anchorNode.parentNode.isContentEditable
但是,这不适用于input
和textarea
元素,因为:
-
getSelection()
不会返回其中的选择,因为它们的值不作为文本节点存在。您可以改用document.activeElement
。 -
isContentEditable
不会适用,因为您编辑的是其值而不是其内容。相反,您应该检查它们是disabled
还是readOnly
(disabled
似乎不可选择,但您可以检查以防万一)。
function isEditable() {
var el = document.activeElement; // focused element
if(el && ~['input','textarea'].indexOf(el.tagName.toLowerCase())
return !el.readOnly && !el.disabled;
el = getSelection().anchorNode; // selected node
if(!el) return undefined; // no selected node
el = el.parentNode; // selected element
return el.isContentEditable;
}
var el;
function isEditable() {
if(el) el.className = '';
el = document.activeElement; // focused element
if(el && ~['input','textarea'].indexOf(el.tagName.toLowerCase())) {
el.className = 'selected';
return !el.readOnly && !el.disabled;
}
el = getSelection().anchorNode; // selected node
if(!el) return undefined; // no selected node
el = el.parentNode; // selected element
el.className = 'selected';
return el.isContentEditable;
}
var res = document.getElementById('result');
setInterval(function() {
res.textContent = isEditable();
}, 200);
#result {
font-size: 200%;
font-weight: bold;
}
.selected {
outline: 3px solid red;
}
<div>Non-editable div</div>
<div contentEditable="true">Editable div</div>
<input value="Editable input" />
<input value="Read-only input" readonly />
<input value="Disabled input" disabled />
<textarea>Editable textarea</textarea>
<textarea readonly>Read-only textarea</textarea>
<textarea disabled>Disabled textarea</textarea>
<hr />
<p>Is editable: <span id="result"></span></p>
输入标签具有属性readonly
,用于判断是否可以编辑输入。
您可以尝试:
if(yourInput.readonly == true) { // where yourInput is the input tag
// can not be edited
} else {
// can be edited
}
您可以对其进行修补以适合您正在使用的内容。
相关文章:
- 检查所选文本是否在给定的CSS类中
- 如何使用jQuery检查文本框中的文本是否 asp.net 选中
- 检查输入/文本区域中粘贴的文本是否存在无效的章程
- jQuery 验证输入文本是否仅接受数字、单词或日期
- 谷歌脚本查看文本是否包含值
- 检测文本是否在鼠标上突出显示jQuery
- 如何检查所选文本是否可编辑
- 如何使用右键单击检测文本是否已粘贴
- (IE 特定)如何确定输入的文本是否比输入元素的宽度长
- 如何测试所选文本是否为链接
- 检查文本是否为 HTML
- 检查文本是否包含图像网址(正则表达式)
- JavaScript 检查链接内的文本锚文本是否溢出
- 使用 JQuery 检查所选文本是否是较大节点的一部分
- TinyMCE - 检查文本是否被选中
- 在上下文菜单中,Chrome如何知道文本是否为URL
- jquery检查文本是否已从输入字段中删除
- 如何检查网页中的文本是否有粗体
- 动态检查文本是否转到下一页,并使用pdfmake在pdf中添加分页符
- 检查所有输入文本是否为空,如果至少有一个已填充,则打开颜色框