1.寫一個JavaScript函數,輸入指定類型的選擇器(只需支援id,class,tagName三種簡單CSS選擇器,無需相容組合選擇器)
問題是:下面的正規符合看不懂,var reg = /^(#)?(.)?(w )$/img;var regResult = reg.exec(selector); ,具體如下
var query = function(selector) {
var reg = /^(#)?(\.)?(\w+)$/img;
var regResult = reg.exec(selector);
var result = [];
//如果是id选择器
if(regResult[1]) {
...
}
//如果是class选择器
else if(regResult[2]) {
...
}
//如果是标签选择器
else if(regResult[3]) {
...
}
}
扔个三星炸死你2017-06-26 10:59:53
/^(#)?(.)?(w+)$/img
拆一下//之間的是正則的內容後面img是正則的匹配方式
i:ignorCase忽略大小寫
m:mutiple允許多行匹配
g:globle進行全域匹配,指匹配到目標字串的結尾
正規內容:^(#)?(.)?(w+)$
^代表以xxx開頭$代表以xxxx結尾
(#)?可以帶一個或不帶#
(.)? 可以帶.或者沒有.
(w+) 匹配一個或多個單字
曾经蜡笔没有小新2017-06-26 10:59:53
/^(#)?(.)?(w+)$/img
(#)?
匹配ID的
(.)?
匹配className
(w+)
剩下都是標籤名或[1,2]中具體的ID或className名稱
迷茫2017-06-26 10:59:53
給你一個,我寫的utils中的dom片段
class dom extends base{
constructor(){
super();
}
// 根据ID获取指定DOM
byId(_id){
return document.getElementById(string.replace(_id,'#',''));
}
// 根据ID或Class获取DOM
get(_id){
if(_id.indexOf('.') > -1){
let list = document.getElementsByClassName(string.replace(_id,'\.',''));
this._object = Array.from(list);
}else{
this._object = [this.byId(_id)];
}
return this;
}
// 根据Name获取相关DOM
byName(_name){
let list = document.getElementsByName(_name);
if(list.length > 0)
return Array.from(list);
return null;
}
// 返回dom原型
get valueOf(){
if(this._object.length >1){
return this._object;
}
return this._object[0];
}
// 基础DOM操作方法
_dom_ctrols(_func){
for(let info of this._object){
_func(info);
}
return this;
}
// 增加class
addClass(_name){
this._dom_ctrols((info)=>{
if(info.className.indexOf(_name) == -1){
info.className += ' ' + _name;
}
})
return this;
}
// 删除class
removeClass(_name){
this._dom_ctrols((info)=>{
info.className = string.replace(info.className,_name,'');
})
return this;
}
// 显示?隐藏DOM主方法
_hide_show(_value){
this._dom_ctrols((info)=>{
info.style.display = _value;
});
}
// 隐藏DOM
hide(){
this._hide_show('none');
}
// 显示DOM
show(){
this._hide_show('block');
}