ฉันจะลบสไตล์อินไลน์ทั้งหมดด้วยจาวาสคริปต์และเหลือเฉพาะสไตล์ที่ระบุในสไตล์ชีต css ได้อย่างไร


94

หากฉันมีสิ่งต่อไปนี้ใน html ของฉัน:

<div style="height:300px; width:300px; background-color:#ffffff;"></div>

และสิ่งนี้ในสไตล์ชีต css ของฉัน:

div {
    width:100px;
    height:100px;
    background-color:#000000;
}

มีวิธีใดบ้างที่ใช้ javascript / jquery เพื่อลบสไตล์อินไลน์ทั้งหมดและเหลือเฉพาะสไตล์ที่ระบุโดยสไตล์ชีต css

คำตอบ:


166

$('div').attr('style', '');

หรือ

$('div').removeAttr('style');(จากคำตอบของ Andres )

หากต้องการทำให้เล็กลงให้ลองทำดังนี้:

$('div[style]').removeAttr('style');

สิ่งนี้ควรเร่งความเร็วขึ้นเล็กน้อยเนื่องจากตรวจสอบว่า div มีแอตทริบิวต์ style

ไม่ว่าจะด้วยวิธีใดการดำเนินการนี้อาจใช้เวลาสักครู่ในการประมวลผลหากคุณมี div จำนวนมากดังนั้นคุณอาจต้องการพิจารณาวิธีอื่นนอกเหนือจากจาวาสคริปต์


หากต้องลบแอตทริบิวต์ style ก็จะต้องค้นหาด้วยดังนั้นวิธีสุดท้ายจึงดูเหมือนว่าจะทำให้โค้ดสกปรกกว่า imho เท่านั้น แน่นอนว่าสิ่งที่ดีที่สุดคือการเลือกเฉพาะองค์ประกอบที่คุณต้องการเพื่อลบสไตล์โดยอาจเป็นไปได้ผ่าน ID
Jose Faeti

สิ่งนี้จะกำหนดเป้าหมายเฉพาะ div เท่านั้น ถ้าคุณต้องการกำหนดเป้าหมายทุกอย่าง?
ไฟถนน

1
ในกรณีที่เกี่ยวข้องกันการเรียก.css()ด้วยสตริงว่างเป็นค่าที่สองจะลบเฉพาะค่าที่ตั้งชื่อจากรูปแบบอินไลน์เช่น $ ('div') css ('display', ''); จะลบเพียงคุณสมบัติการแสดงผลแบบอินไลน์ (หากตั้งค่าไว้)
Tom Davies

2
@streetlight ใช้$('*').removeAttr('style')เพื่อกำหนดเป้าหมายทุกอย่าง
Makaze

ไม่จริงอันที่สองควรจะเร็วกว่าเล็กน้อยเพราะถ้า JQuery มีความรู้สึกใด ๆ มันจะใช้การลบแอตทริบิวต์มาตรฐาน นอกจากนี้คุณยังลืมค่าใช้จ่ายในการวนซ้ำที่ไม่มีประสิทธิภาพขนาดใหญ่แม้ว่าจะมีองค์ประกอบ DOM มากกว่าซึ่งทำให้วิธีที่สองเร็วกว่าวิธีแรก

35

JavaScript ธรรมดา:

คุณไม่จำเป็นต้องใช้ jQuery เพื่อทำสิ่งที่ไม่สำคัญเช่นนี้ เพียงแค่ใช้.removeAttribute()วิธี

สมมติว่าคุณกำหนดเป้าหมายเพียงองค์ประกอบเดียวคุณสามารถใช้สิ่งต่อไปนี้: (ตัวอย่าง)

document.querySelector('#target').removeAttribute('style');

หากคุณกำหนดเป้าหมายหลายองค์ประกอบให้วนซ้ำคอลเลกชันขององค์ประกอบที่เลือก: (ตัวอย่าง)

var target = document.querySelectorAll('div');
Array.prototype.forEach.call(target, function(element){
    element.removeAttribute('style');
});

Array.prototype.forEach()- IE9 ขึ้นไป / .querySelectorAll()- IE 8 (บางส่วน) IE9 ขึ้นไป


1
ทางเลือกในการเป็นผู้ประกอบการสัญญาณค่อนข้างดีที่สนับสนุนซึ่งจะช่วยประหยัดบรรทัด:Array.prototype.forEach.call [... document.querySelectorAll('div')].forEach(div => div.removeAttribute('style'))

23
$('div').removeAttr('style');

มีประสิทธิภาพมากกว่าการทำ attr ('style', '') หรือไม่?
แมตต์

ด้วย $ ('div'). attr ('style', ''); <div style = ""> </div> ด้วย $ ('div'). removeAttr ('style'); <div> </div> สะอาดกว่า
andres descalzo

อาจเป็นเพราะไม่ได้ตั้งค่าเป็นค่าว่าง แต่ไม่ว่าคุณจะใช้เวลาประมวลผลมากเพราะต้องผ่านทุก div ใน body
Tyler Carter

ใช่ชัดเจนควรเปลี่ยนเป็น ID $ ("# id") หรือคลาส $ (".classDivs)
andres descalzo

3

ฉันใช้$('div').attr('style', '');เทคนิคนี้และไม่ได้ผลใน IE8

ฉันเอาท์พุทแอตทริบิวต์สไตล์โดยใช้alert()และมันไม่ได้ลอกสไตล์อินไลน์ออก

.removeAttr จบลงด้วยการทำเคล็ดลับใน IE8


3

หากคุณต้องการเพียงแค่ทำให้styleองค์ประกอบว่างเปล่า:
element.style.cssText = null;
สิ่งนี้ควรทำดี หวังว่าจะช่วยได้!


ดูเหมือนว่าจะใช้ตรรกะที่คล้ายกันหากพยายาม "ว่าง" เพียงคุณสมบัติสไตล์เดียวสำหรับองค์ประกอบ: element.style.display = null;- นั่นคือสิ่งที่ฉันต้องการ: D
Bilal Akil

2

สามารถทำได้ในสองขั้นตอน:

1: เลือกองค์ประกอบที่คุณต้องการเปลี่ยนโดยใช้ tagname, id, class เป็นต้น

var element = document.getElementsByTagName('h2')[0];

  1. ลบแอตทริบิวต์สไตล์

element.removeAttribute('style');


-2

คุณสามารถลองแสดงรายการ css ในสไตล์ชีตเป็น! important


3
ในขณะที่วิธีนี้ใช้ได้ผล แต่การลบล้างสไตล์อินไลน์ด้วยเป็นเรื่องที่แย่มาก! สิ่งสำคัญในการลบออก
joshvermaire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.