javascript 使用JS检查HTML元素是否可编辑

8cdiaqws  于 2023-01-16  发布在  Java
关注(0)|答案(4)|浏览(218)

使用JS,我们怎样才能知道我们是否可以输入一个html元素呢?我试着将.tagName与INPUT或TEXTAREA比较,但是它不能区分常规的输入文本/电子邮件元素和单选按钮或提交按钮。
我也尝试了“.isContentEditable”,但是当元素是“继承的”时,我无法区分。

jjjwad0x

jjjwad0x1#

对于输入和文本区域,检查tagNametype,不要忘记更新的HTML5输入类型,如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"

q35jwt9p

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;
}
yyyllmsg

yyyllmsg3#

使用只读属性。
http://www.w3schools.com/jsref/prop_text_readonly.asp开始:

document.getElementById("myText").readOnly = true;
smdnsysy

smdnsysy4#

@percy507有一处排印错误。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;
}

相关问题