[英]Check whether an HTML element is editable or not using JS
使用 JS,我們如何判斷是否可以輸入 html 元素。 我正在嘗試將“.tagName”與“INPUT”或“TEXTAREA”進行比較,但它無法區分常規輸入文本/電子郵件元素和單選按鈕或提交按鈕。
我也嘗試過“.isContentEditable”,但是當元素是“繼承的”時,我無法區分。
對於輸入和文本區域,請檢查tagName
和type
,不要忘記更新的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"
。
使用只讀屬性。
來自http://www.w3schools.com/jsref/prop_text_readonly.asp :
document.getElementById("myText").readOnly = true;
這是一個 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;
}
@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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.