亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

正在回答

2 回答

function?getByClass(parent,?clsName)?{
	var?arr?=?new?Array(),
		clsArr?=?new?Array(),
		obj?=?parent.getElementsByTagName('*');
	for?(var?i?=?0;?i?<?obj.length;?i++)?{
		clsArr?=?obj[i].className.split('?');
		for?(var?j?=?0;?j?<?clsArr.length;?j++)
			if?(clsArr[j]?==?clsName)?{
				arr.push(obj[i]);
				break;
			}
	}
	return?arr;
}

可以先用 **className.split(' ') 將字符串分割成div所包含所有類構成的數組,然后遍歷數組是否等于查找類名就行

然而正則匹配需要判斷:匹配類在字符串首、尾和中間還有其它類名包含或者用短線組合的類名,等等多種情況

比如 匹配'ades', 有'ades ??ades w?ades-wer ju-ades ?dh ades'等等,可以看出若是RegExp=/\bades\b/這種就不能匹配在字符串首尾的情況,和誤匹配到ades-wer中的ades,所以總體最終的正則匹配表達式會復雜許多,

這里給一個我想好久整出來的匹配表達式,理論上最優的是 /(?<=\s|^)ades(?=\s|$)/ig 不過這里js似乎不支持逆序環視匹配“ (?<= ”和“ (?<! ”,所以不行,瀏覽器報錯,

退而求其次, 用這個/(?:\s|^)ades(?=\s|$)/ig?,這個就是可能會匹配到類名前后的空白字符,用非獲取匹配 替代?逆序環視,總算匹配出想要的結果了

附上百度百科“正則表達式”詞條:http://baike.baidu.com/view/94238.htm

對了下面贈送個人仿照jQuery寫的一個函數$('#myid ?=myname')表示查找id=myid的標簽下的name=myname的所有dom對象,其中=號是仿照id和類自造的一個標志,同理有$('#id .className')等等用法。

function?$()?{
	if?(arguments.length?==?0)?return?document.getElementsByTagName('*');
	else?if?(arguments.length?==?1)?var?str?=?arguments[0];
	else?if?(arguments.length?==?2)?{
		var?parent?=?arguments[0];
		var?str?=?arguments[1];
		if?(!isDOM(parent))?return?null;
	}
	else?return?null;
	var?obj?=?parent???parent?:?document;
	var?arr1?=?str.match(/^([#|\.|\=]?)([\w-]+)$/);
	var?arr2?=?str.match(/^#([\w-]+)?([#|\.|\=]?[\w-]+)$/);
	if?(arr1)?{
		switch?(arr1[1])?{
		case?'#':
			return?obj.getElementById(arr1[2]);
		case?'=':
			return?obj.getElementsByName(arr1[2]);
		case?'.':
			return?getByClass(obj,?arr1[2]);
		default:
			return?obj.getElementsByTagName(arr1[2]);
		}
	}
	if?(arr2)?{
		var?subObj?=?obj.getElementById(arr2[1]);
		return?$(subObj,?arr2[2]);
	}
	return?null;
}

function?getByClass(parent,?clsName)?{
	var?arr?=?new?Array(),
		clsArr?=?new?Array(),
		obj?=?parent.getElementsByTagName('*');
	for?(var?i?=?0;?i?<?obj.length;?i++)?{
		clsArr?=?obj[i].className.split('?');
		for?(var?j?=?0;?j?<?clsArr.length;?j++)
			if?(clsArr[j]?==?clsName)?{
				arr.push(obj[i]);
				break;
			}
	}
	return?arr;
}

function?isDOM(obj)?{
	if?(typeof?HTMLElement?===?'object')?return?obj?instanceof?HTMLElement;
	else?return?obj?&&?typeof?obj?===?'object'?&&?obj.nodeType?===?1?&&?typeof?obj.nodeName?===?'string';
}

人懶就沒寫注釋,憑字面意思看吧

1 回復 有任何疑惑可以回復我~

getClassName這個函數 如果是一個div上有兩個className怎么解決?請大牛給予幫助,謝謝!

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號