使用JS,我们怎样才能知道我们是否可以输入一个html元素呢?我试着将.tagName与INPUT或TEXTAREA比较,但是它不能区分常规的输入文本/电子邮件元素和单选按钮或提交按钮。我也尝试了“.isContentEditable”,但是当元素是“继承的”时,我无法区分。
jjjwad0x1#
对于输入和文本区域,检查tagName和type,不要忘记更新的HTML5输入类型,如email。下面是我的代码片段,用于测试存储在变量el中的元素:
tagName
type
email
el
var nodeName = el.nodeName.toLowerCase(); if (el.nodeType == 1 && (nodeName == "textarea" || (nodeName == "input" && /^(?:text|email|number|search|tel|url|password)$/i.test(el.type)))) { // Do stuff }
对于其他元素,isContentEditable属性在所有情况下都有效,并且只应返回布尔值,而不应返回"inherit"之类的字符串。最后,有可能使用document.designMode属性将整个文档设置为可编辑,在这种情况下,document.designMode将具有字符串值"on"。
isContentEditable
"inherit"
document.designMode
"on"
q35jwt9p2#
这是 typescript 。
function isEditableElement(el: EventTarget) { if (el instanceof HTMLElement && el.isContentEditable) return true; if (el instanceof HTMLInputElement) { // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types if (/|text|email|number|password|search|tel|url/.test(el.type || '')) { return !(el.disabled || el.readOnly); } } if (el instanceof HTMLTextAreaElement) return !(el.disabled || el.readOnly); return false; }
yyyllmsg3#
使用只读属性。从http://www.w3schools.com/jsref/prop_text_readonly.asp开始:
document.getElementById("myText").readOnly = true;
smdnsysy4#
@percy507有一处排印错误。if (/|text|email|numb-〉if (/text|email|numb
if (/|text|email|numb
if (/text|email|numb
function isEditableElement(el: EventTarget) { if (el instanceof HTMLElement && el.isContentEditable) return true; if (el instanceof HTMLInputElement) { // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types if (/text|email|number|password|search|tel|url/.test(el.type || '')) { return !(el.disabled || el.readOnly); } } if (el instanceof HTMLTextAreaElement) return !(el.disabled || el.readOnly); return false; }
4条答案
按热度按时间jjjwad0x1#
对于输入和文本区域,检查
tagName
和type
,不要忘记更新的HTML5输入类型,如email
。下面是我的代码片段,用于测试存储在变量el
中的元素:对于其他元素,
isContentEditable
属性在所有情况下都有效,并且只应返回布尔值,而不应返回"inherit"
之类的字符串。最后,有可能使用
document.designMode
属性将整个文档设置为可编辑,在这种情况下,document.designMode
将具有字符串值"on"
。q35jwt9p2#
这是 typescript 。
yyyllmsg3#
使用只读属性。
从http://www.w3schools.com/jsref/prop_text_readonly.asp开始:
smdnsysy4#
@percy507有一处排印错误。
if (/|text|email|numb
-〉if (/text|email|numb