ฉันจะยกเลิกการตั้งค่าแอตทริบิวต์ CSS ขององค์ประกอบโดยใช้ jQuery ได้อย่างไร


95

หากฉันตั้งค่า CSS ในองค์ประกอบเฉพาะโดยใช้:

$('#element').css('background-color', '#ccc');

ฉันต้องการที่จะสามารถยกเลิกการตั้งค่าเฉพาะองค์ประกอบนั้นและใช้ค่าเรียงซ้อนตามบรรทัดของ:

$('#element').css('background-color', null);

แต่ดูเหมือนว่าไวยากรณ์จะใช้ไม่ได้ - เป็นไปได้หรือไม่โดยใช้ไวยากรณ์อื่น

แก้ไข:ค่านี้ไม่ได้รับมาจากองค์ประกอบหลัก - ค่าดั้งเดิมมาจากตัวเลือกระดับองค์ประกอบ ขออภัยในความสับสน!

คำตอบ:


143

จากเอกสาร jQuery :

การตั้งค่าคุณสมบัติสไตล์เป็นสตริงว่าง - เช่น$('#mydiv').css('color', '')- ลบคุณสมบัตินั้นออกจากองค์ประกอบหากมีการนำไปใช้โดยตรงแล้วไม่ว่าจะในแอตทริบิวต์สไตล์ HTML โดย.css()ใช้วิธีการของ jQuery หรือผ่านการจัดการ DOM โดยตรงของstyleคุณสมบัติ อย่างไรก็ตามจะไม่ลบสไตล์ที่ใช้กับกฎ CSS ในสไตล์ชีตหรือ<style>องค์ประกอบ


ฉันเจอคำถามนี้เมื่อฉันมีปัญหานี้ ในกรณีของฉันฉันตั้งค่าแอตทริบิวต์ css ในstyleแอตทริบิวต์บนแท็กดังนั้นวิธีนี้จึงใช้ไม่ได้ การใช้สไตล์กับ.css()เมธอดแทนในแท็กทำให้ฉันสามารถลบออกได้ในภายหลัง
Glenn Moss

14

ฉันคิดว่าคุณสามารถทำได้:

$('#element').css('background-color', '');

นั่นคือสิ่งที่ฉันเคยทำเมื่อนานมาแล้วสำหรับdisplayคุณสมบัติในจาวาสคริปต์ธรรมดาเพื่อแสดง / ซ่อนฟิลด์


4

อันที่จริงไวยากรณ์ที่ฉันคิดว่าไม่ถูกต้อง (ด้วยnull) ดูเหมือนจะใช้งานได้ - ตัวเลือกของฉันเพิ่งสร้างขึ้นไม่ถูกต้องและทำให้ไม่มีองค์ประกอบใด ๆ โธ่!


21
เนื่องจาก jquery 1.4.3 css(..., null)ไม่ทำงานและcss(..., '')ควรใช้แทน - bugs.jquery.com/ticket/7233
Tim Sylvester

3

ลองสิ่งนี้:

$('#element').css('background-color', 'inherit');

1
น่าเสียดายที่การสืบทอดไม่ใช่พฤติกรรมที่ฉันกำลังมองหา: "คุณสมบัติรับค่าที่คำนวณเช่นเดียวกับคุณสมบัติสำหรับพาเรนต์ขององค์ประกอบ" จากw3.org/TR/CSS2/cascade.html
cdleary

"เริ่มต้น" มีแนวโน้มมากกว่า "สืบทอด" 'Inherit' ปรับมาจากพาเรนต์ส่วน 'Initial' จะทำตามที่คำพูดนั้น ๆ
Chris S.

0

สำหรับสิ่งที่คุ้มค่านี้ดูเหมือนจะไม่ทำงานใน IE 8 สำหรับ 'ตัวกรอง' ฉันต้องใช้สิ่งนี้ (ในการเรียกกลับ fadeIn):

$(this).attr('style', $(this).attr('style').replace(/\bfilter:\s*;*/, ''));

เห็นได้ชัดว่าฉันจำเป็นต้องลบการประกาศตัวกรองแบบอินไลน์ที่ว่างเปล่าเพื่อให้ CSS มีผล มีกฎอินไลน์อื่น ๆ ดังนั้นฉันจึงไม่สามารถลบแอตทริบิวต์สไตล์ได้


-2

หากสามารถช่วยได้ฉันจะเพิ่มปัญหาด้วยเครื่องหมายคำพูดคู่:

$('#element').css("border-color", "");

ไม่ทำงานในขณะที่

$('#element').css('border-color', '');

ได้ผล

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