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