getComputedStyle过滤无用样式

JavaScript的getComputedStyle过滤无用样式


爬别人的网站想要获取指定元素的css样式,但是从css文件里找或者浏览器f12复制,几千行的css,太麻烦了。然后getComputedStyle()会获取一堆默认样式,我就过滤了一下,虽然还有重复的,但是比之前的好很多了,至于优先级,暂时不知道怎么确定。下面贴代码,有大佬有别的思路可以戳我

/**驼峰转标准 */
function toLowerLine(str) {
	var temp = str.replace(/[A-Z]/g, function (match) {	
		return "-" + match.toLowerCase();
  	});
  	if(temp.slice(0,6) === 'webkit'){
  		temp = '-'+temp;
  	}
	return temp;
}

function filterObj(currObj,initObj,style){
    let currEleArr =  Object.keys(currObj)
    let newObj = {}
    let temp
    for(let i = 1;i<currEleArr.length;i++){
     if(currObj[currEleArr[i]] !== initObj[currEleArr[i]]){
          /**大写转小写 */
          temp = toLowerLine(currEleArr[i])
          Object.defineProperty(newObj,temp,{value: currObj[currEleArr[i]],configurable: true})
     }
    }

    /**包装行内标签 */
    let i = 0
    while(true){
         if(!style[i] || i>99999)break
         delete newObj[style[i]]
         i++
    }
    newObj.inlineStyle = style.cssText
    return newObj
}

function getStyle(ele,pseudoEle) {
     /**element不为空 */
     if (!ele) return
     /**jQuery对象转为DOM对象 */
     if ((typeof jQuery != 'undefined') && (ele instanceof jQuery)) {
          ele = ele[0]
     }
     /**获取伪类样式 */
     if(pseudoEle){
          console.log("伪类样式暂不支持");
          return
     }
     /**创建空标签并渲染到页面 */
     const initTag = document.createElement(ele.tagName)
     document.body.appendChild(initTag)
     /**获取两标签样式 */
     const initTagStyle = getComputedStyle(initTag)
     const currEleStyle = getComputedStyle(ele)
     /**获取行内样式*/
     const currEleInline = ele.style
     /**过滤无用标签和行内标签并重新合并 */
     const styles = filterObj(currEleStyle,initTagStyle,currEleInline)
     return styles
}

直接调用:getStyle( DOM对象/jQuery对象 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值