課程
/前端開(kāi)發(fā)
/JavaScript
/瀑布流布局
done!
2014-07-07
源自:瀑布流布局 2-7
正在回答
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所包含所有類構(gòu)成的數(shù)組,然后遍歷數(shù)組是否等于查找類名就行
然而正則匹配需要判斷:匹配類在字符串首、尾和中間還有其它類名包含或者用短線組合的類名,等等多種情況
比如 匹配'ades', 有'ades ??ades w?ades-wer ju-ades ?dh ades'等等,可以看出若是RegExp=/\bades\b/這種就不能匹配在字符串首尾的情況,和誤匹配到ades-wer中的ades,所以總體最終的正則匹配表達(dá)式會(huì)復(fù)雜許多,
這里給一個(gè)我想好久整出來(lái)的匹配表達(dá)式,理論上最優(yōu)的是 /(?<=\s|^)ades(?=\s|$)/ig 不過(guò)這里js似乎不支持逆序環(huán)視匹配“ (?<= ”和“ (?<! ”,所以不行,瀏覽器報(bào)錯(cuò),
退而求其次, 用這個(gè)/(?:\s|^)ades(?=\s|$)/ig?,這個(gè)就是可能會(huì)匹配到類名前后的空白字符,用非獲取匹配 替代?逆序環(huán)視,總算匹配出想要的結(jié)果了
附上百度百科“正則表達(dá)式”詞條:http://baike.baidu.com/view/94238.htm
對(duì)了下面贈(zèng)送個(gè)人仿照jQuery寫(xiě)的一個(gè)函數(shù)$('#myid ?=myname')表示查找id=myid的標(biāo)簽下的name=myname的所有dom對(duì)象,其中=號(hào)是仿照id和類自造的一個(gè)標(biāo)志,同理有$('#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'; }
人懶就沒(méi)寫(xiě)注釋,憑字面意思看吧
getClassName這個(gè)函數(shù) 如果是一個(gè)div上有兩個(gè)className怎么解決?請(qǐng)大牛給予幫助,謝謝!
舉報(bào)
瀑布流布局是網(wǎng)站比較流行的一種布局方式,教你實(shí)現(xiàn)三大方式
1 回答
3 回答
2 回答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-06-22
可以先用 **className.split(' ') 將字符串分割成div所包含所有類構(gòu)成的數(shù)組,然后遍歷數(shù)組是否等于查找類名就行
然而正則匹配需要判斷:匹配類在字符串首、尾和中間還有其它類名包含或者用短線組合的類名,等等多種情況
比如 匹配'ades', 有'ades ??ades w?ades-wer ju-ades ?dh ades'等等,可以看出若是RegExp=/\bades\b/這種就不能匹配在字符串首尾的情況,和誤匹配到ades-wer中的ades,所以總體最終的正則匹配表達(dá)式會(huì)復(fù)雜許多,
這里給一個(gè)我想好久整出來(lái)的匹配表達(dá)式,理論上最優(yōu)的是 /(?<=\s|^)ades(?=\s|$)/ig 不過(guò)這里js似乎不支持逆序環(huán)視匹配“ (?<= ”和“ (?<! ”,所以不行,瀏覽器報(bào)錯(cuò),
退而求其次, 用這個(gè)/(?:\s|^)ades(?=\s|$)/ig?,這個(gè)就是可能會(huì)匹配到類名前后的空白字符,用非獲取匹配 替代?逆序環(huán)視,總算匹配出想要的結(jié)果了
附上百度百科“正則表達(dá)式”詞條:http://baike.baidu.com/view/94238.htm
對(duì)了下面贈(zèng)送個(gè)人仿照jQuery寫(xiě)的一個(gè)函數(shù)$('#myid ?=myname')表示查找id=myid的標(biāo)簽下的name=myname的所有dom對(duì)象,其中=號(hào)是仿照id和類自造的一個(gè)標(biāo)志,同理有$('#id .className')等等用法。
人懶就沒(méi)寫(xiě)注釋,憑字面意思看吧
2014-07-07
getClassName這個(gè)函數(shù) 如果是一個(gè)div上有兩個(gè)className怎么解決?請(qǐng)大牛給予幫助,謝謝!