摘要:使用抓取頁面詳情,并且保存頁面樣式獲取元素匹配到規(guī)則,返回集合獲取元素所有最終使用的屬性值大招想到獲取元素的樣式,第一時(shí)間就想到了這貨里面被廢棄了這貨沒法使用了,接下來就看下面了這個(gè)方法也是掛在上的可以直接使用返回對象然后看一下對象,有個(gè)屬
使用phantomjs抓取頁面詳情,并且保存頁面樣式
getMatchedCSSRules 獲取元素匹配到css規(guī)則,返回CSSStyleRule 集合
getComputedStyle 獲取元素所有最終使用的CSS屬性值
大招
getMatchedCSSRules想到獲取元素的css樣式,第一時(shí)間就想到了這貨
// chrome 里面 var style = getMatchedCSSRules(document.body) // "getMatchedCSSRules()" is deprecated. For more help, check // https://code.google.com/p/chromium/issues/detail?id=437569#c2
被廢棄了.
getMatchedCSSRules這貨沒法使用了,接下來就看下面getComputedStyle了
getComputedStyle這個(gè)方法也是掛在windows上的可以直接使用
var style = getComputedStyle(document.body) // 返回 CSSStyleDeclaration 對象
然后看一下CSSStyleDeclaration對象,有261個(gè)屬性,看著可以使用的樣子,接下來就是把這個(gè)對象拼接成style字符串,就行了
如果這么簡單就好了。。
首先CSSStyleDeclaration屬性太多,保存到文檔里面太占用空間,其次...它是經(jīng)過計(jì)算的
代碼的本意是想獲得 100%這個(gè)數(shù)值,但是卻獲得了XXXpx,這樣的話就沒法做朋友了..
看來需要使用大招了.
大招所有正規(guī)軍失敗了,下面就是游擊隊(duì)的表演了
獲取通過鏈接進(jìn)來的css樣式表
通過ajax獲取樣式表內(nèi)容
計(jì)算元素命中的樣式
獲取所有頁面樣式本來是能通過document.styleSheets 來獲取樣式,但是有個(gè)css優(yōu)先級問題,所以需要通過document.querySelectorAll("link") 獲取所有l(wèi)ink標(biāo)簽
var sheets = [] $("link").each(function () { var link = $(this) sheets.push({ prev: link.prev(), // 記錄元素位置,便于插入 el: link,// 記錄當(dāng)前元素,用來刪除 href: link.attr("href") }) })獲取樣式表內(nèi)容
所幸的是在phantomjs里面可以跨域發(fā)送ajax請求,并且能夠獲取response.text
function iterLink(sheets, func) { var sheet = sheets.pop() if (!sheet) { return } var g = new XMLHttpRequest g.open("GET", sheet.href) g.onreadystatechange = function () { if (this.readyState == this.DONE) { var h = $("") h.prop("textContent", this.responseText) sheet.el.remove() // 刪除當(dāng)前元素 sheet.prev.after(h)// 在當(dāng)前元素的位置上插入重新創(chuàng)建的元素 if (sheets.length === 0) { func && func() } else { iterLink(sheets, func) } } } g.send() }計(jì)算元素命中的樣式規(guī)則
研究文檔才發(fā)現(xiàn)dom還有matches方法,天不絕人之路啊
matches接收selectorString返回true or false
上面做的所有工作都是為了這個(gè)坑貨,直接上代碼吧
function getElStyleStr(a) { var sheets = document.styleSheets a.matches = a.matches || a.webkitMatchesSelector //獲取到真正的matches方法 var tmp = {} var tmpArr = [] for (var i in sheets) { var rules = sheets[i].rules || sheets[i].cssRules //前面兩步執(zhí)行之后才能得到所有的css rules // 計(jì)算rule for (var r in rules) { var rule = rules[r] var style = rule.style if (a.matches(rule.selectorText)) { // 調(diào)用matches獲取,測試匹配 for (var j = 0; j < style.length; j++) { tmp[style[j]] = style[style[j]] } } } } for (var k in tmp) { tmpArr.push(k + ":" + tmp[k]) } return tmpArr.join(";") }
得到styleStr之后就可以直接寫入到對應(yīng)元素的style屬性里面了
又填了一個(gè)大坑...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81161.html
摘要:使用抓取頁面詳情,并且保存頁面樣式獲取元素匹配到規(guī)則,返回集合獲取元素所有最終使用的屬性值大招想到獲取元素的樣式,第一時(shí)間就想到了這貨里面被廢棄了這貨沒法使用了,接下來就看下面了這個(gè)方法也是掛在上的可以直接使用返回對象然后看一下對象,有個(gè)屬 使用phantomjs抓取頁面詳情,并且保存頁面樣式 getMatchedCSSRules 獲取元素匹配到css規(guī)則,返回CSSStyleRul...
摘要:首先,巧妙的使用這一標(biāo)記,將游覽器從所有情況中分離出來。接著,再次使用將和分離開來,這樣已經(jīng)獨(dú)立識別。元素不能用作語義用途以外的其他目的。Html1、Html5有哪些新特性,移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)別HTML和HTML5?HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。拖拽釋放(Drag and drop) ...
摘要:定位使元素的位置與文檔流無關(guān),因此不占據(jù)空間。它的行為就像而當(dāng)頁面滾動超出目標(biāo)區(qū)域時(shí),它的表現(xiàn)就像,它會固定在目標(biāo)位置。此元素會被顯示為內(nèi)聯(lián)元素,元素前后沒有換行符。以下內(nèi)容部分轉(zhuǎn)載自菜鳥教程CSS層疊樣式表(CascadingStyleSheets)內(nèi)聯(lián):內(nèi)嵌:外部樣式文件:[object Object]rel 屬性,規(guī)定當(dāng)前文檔與被鏈接文檔/資源之間的關(guān)系。優(yōu)先級:內(nèi)聯(lián)>內(nèi)嵌>...
摘要:主要通過樣式為其賦予不同的表現(xiàn)標(biāo)簽用來定義內(nèi)聯(lián)行內(nèi)元素,并無實(shí)際的意義。html文檔結(jié)構(gòu) 1 DOCTYPE html> 2 <html lang="zh-CN"> #這個(gè)lang表示語言,zh-CN中文的意思,整個(gè)文檔的內(nèi)容以中文為主,如果以英文為主,就寫成lang=en 3 4 <head> 5 <meta charset...
閱讀 2946·2021-11-22 15:25
閱讀 2240·2021-11-18 10:07
閱讀 1045·2019-08-29 15:29
閱讀 472·2019-08-29 13:25
閱讀 1503·2019-08-29 12:58
閱讀 3201·2019-08-29 12:55
閱讀 2911·2019-08-29 12:28
閱讀 500·2019-08-29 12:16