我正在为我公司的内部开发编写一段库代码,所以这纯粹是一个个人满意的问题 - 如果有问题,我们的错误记录会很快记录下来,我们将能够进行更新。 ..如果可能,我只想避免这些:D
图书馆需要对传入的<th>
或<td>
值进行操作,这些值来自document.get...
,document.createElement
或onmousedown
个事件。当错误的对象(即非th
/ td
)进入函数时,我遇到了问题,因此我在函数的顶部放置了一个失败的子句: / p>
function doSomething (cell) {
var _objName = Object.getPrototypeOf(cell).toString();
if (_objName.indexOf("HTMLTableCellElement") === -1 &&
_objName.indexOf("HTMLTableHeaderCellElement") === -1) {
// log error
return false;
}
// normal work here
}
这样安全吗?我的目标是在我们公司内部使用现代(IE 10+,Chrome)浏览器,它现在似乎有效:
"[object HTMLTableCellElementPrototype]"
(适用于<TD>
)或"[object HTMLTableCellHeaderElementPrototype]"
(适用于<TH>
)"[object HTMLTableCellElement]"
我担心我依赖于未记录的实施细节,当我们转移到其他浏览器或浏览器时,事情就会破裂。
这是安全的,还是应该使用其他方法来确保输入正确?一些输入将来自用户点击的内容,因此肯定会有无效的输入进入该功能...
答案 0 :(得分:2)
我应该使用其他方法来确保输入正确吗?
是。使用toString
可能会有效,但检查类名永远不是一个好主意。
相反,只需使用.tagName
来检查是否传递了正确类型的元素:
if (cell.tagName != "TD" && cell.tagName != "TH") { return false; }
或者,您可以使用
中的DOM选择器if (!cell.matches("td, th")) { return false; }
但是对.matches()
的跨浏览器支持并不是那么好。