2012-02-12 84 views

回答

13

可以遞歸迭代通過的所有元素,並刪除style屬性:

function removeStyles(el) { 
    el.removeAttribute('style'); 

    if(el.childNodes.length > 0) { 
     for(var child in el.childNodes) { 
      /* filter element nodes only */ 
      if(el.childNodes[child].nodeType == 1) 
       removeStyles(el.childNodes[child]); 
     } 
    } 
} 

removeStyles(document.body); 

要刪除鏈接的樣式表您還可以使用以下代碼片段:

var stylesheets = document.getElementsByTagName('link'), i, sheet; 

for(i in stylesheets) { 
    sheet = stylesheets[i]; 

    if(sheet.getAttribute('type').toLowerCase() == 'text/css') 
     sheet.parentNode.removeChild(sheet); 
} 
+0

這將刪除直接應用的樣式元素,但不會影響CSS。 – 2012-02-12 22:30:06

+0

@kennis謝謝你指出 - 只是我的答案... – xandercoded 2012-02-12 22:39:32

+0

你的代碼似乎很有希望。無論如何,我必須運行第二個片段兩次才能生效。爲什麼? P.S .: .toLowerCase() – tic 2012-02-12 22:59:51

8

如果您有jQuery的,你也許可以這樣做

$('link[rel="stylesheet"], style').remove(); 
$('*').removeAttr('style'); 
1

使用ES6 Array.from

Array.from(document.querySelectorAll('link[rel="stylesheet"], style')) 
    .forEach(elem => elem.parentNode.removeChild(elem)); 
1

這裏是ES6善良,你可以只用一行做。

1)要刪除所有內嵌樣式(如:style="widh:100px"

Array.from(document.querySelectorAll('[style]')) 
    .forEach(el => el.removeAttribute('style')); 

2)要刪除鏈接外部樣式表(如:<link rel="stylesheet"

Array.from(document.querySelectorAll('link[rel="stylesheet"]')) 
    .forEach(el => el.parentNode.removeChild(el)); 

3)要刪除所有內嵌樣式標籤(例如:<style></style>

Array.from(document.querySelectorAll('style')) 
    .forEach(el => el.parentNode.removeChild(el)); 
相關問題