编写一个类似jQuery的JS元素选择器
Writing a jQuery-like JS element selector
我正在尝试编写类似jQuery的元素选择函数,以缩短常规JS元素选择器。所以我写了这个函数:
function _(str){
var s = str.trim();
var x = s.charAt(0);
if (s.length > 0) {
if(x == "#") return document.getElementById(s.substring(1));
else if(x == ".") return document.getElementsByClassName(s.substring(1));
else if(x == "*") return document.getElementsByTagName(x);
else return document.getElementsByTagName(s);
} else {
return;
}
}
示例用法:_("#container")
。这将返回一个带有 id="container"
的元素。到目前为止,这工作得很好。当我尝试将空格作为变量(即_(" ")
)或不存在的元素(即_("someelement")
)或使用错误的选择器(即_("%p")
)时,问题就开始了。虽然其余的代码仍然有效,但是如果我尝试做这样的事情......
var e = _("$nonexist");
e.style.backgroundColor="yellow";
。然后在控制台中,我收到以下红色错误消息:
TypeError: e.style is undefined
e.style.backgroundColor="yellow";
----^
所以问题是:如何防止在参数中传递非法字符(如空格、$、@ 等)?如果用户传递它们 - 我只想返回一个空白结果,而不是在控制台中看到这些错误消息。
那么你的代码就坏了。你总是返回一些东西,但它可能会undefined
如果你尝试访问 undefined 的 style
属性,你会得到一个错误,因为它不存在。根据您要返回的类型,您应该修改最后一行(如果情况)。您可以返回 ''、[]、未定义等。
function _(str){
var s = str.trim();
var x = s.charAt(0);
if (s.length > 0) {
if(x == "#") return document.getElementById(s.substring(1));
else if(x == ".") return document.getElementsByClassName(s.substring(1));
else if(x == "*") return document.getElementsByTagName(x);
else return [];
} else {
return;
}
}
相关文章:
- jQuery/JS包含运算符或类似运算符
- 使用.on动态添加jquery/js不知道的html元素
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 在服务工作者中导入jquery.js
- jQuery/JS获胜't在表单验证后重定向
- jquery.js和jquery.lite.js有什么区别
- 在WordPress站点中加载jquery.js后加载javascript代码
- 将jQuery.js文件附加到html文档中
- jquery/js中的自执行函数
- 如何使用jquery/js/css逐步突出显示一段文本
- jQuery/JS Mimic Facebook's不在页面上时,标题在新消息上闪烁
- Rails:如何在jQuery(.js.erb)中调用“create”操作
- jQuery/JS:从服务器同步读取文本文件
- jQuery/js- 如何从基于 href 的类中获取菜单名称
- 相对于他在jQuery/Js中的一个内部数据对数组进行排序
- 获取剩余时间和上传文件速度 - ajax jquery/js
- 如何在One'中包含jQuery.js;s Own.js在$(document).ready之前
- jQuery js没有冲突
- 这是关于Jquery/JS的,如果我改变元素's HTML-我可以对它执行其他Jquery/JS操作吗