ลบ CSS "ด้านบน" และ "ซ้าย" คุณสมบัติด้วย jQuery


169

ฉันกำลังสร้างแผนที่ที่สามารถลากได้ซึ่งเมื่อลากแผนที่องค์ประกอบจะได้รับแอตทริบิวต์ 'ด้านซ้าย' และ 'ด้านบน' พร้อมค่าสำหรับแต่ละรายการดังนั้น ...

<div class="map" style="top:200px; left:100px;">Map</div>

ฉันมีปุ่มที่ฉันต้องการลบคุณลักษณะด้านบนและด้านซ้ายออกจากรูปแบบอินไลน์ใน div เมื่อคลิกมันเป็นไปได้ด้วย jquery หรือไม่?


9
ใช่แล้ว. อย่างน้อยคุณสามารถตั้งค่าเป็นค่าว่างได้ซึ่งจะลบออก
เฟลิกซ์ลิ่ง

ซ้ำเป็นไปได้: ลบแอตทริบิวต์ CSS ใช้ jQuery คำตอบอาจมีประโยชน์กับคุณ
Drew Gaynor

โปรดทราบว่า' 'ไม่นับเป็นค่าว่างเท่านั้น''
Peter Berg

3
ในการลบคุณสมบัติ css ครั้งละหนึ่งรายการเท่านั้น: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar

สำหรับบันทึกการตั้งค่าว่างไม่ทำงานเสมอ: "การตั้งค่าของคุณสมบัติสไตล์เป็นสตริงว่าง ... แต่ไม่ลบสไตล์ที่ใช้กับกฎ CSS ในสไตล์ชีทหรือ < สไตล์> องค์ประกอบ " - ดูstackoverflow.com/questions/27791484/…
Mörre

คำตอบ:


139

ค่าเริ่มต้นสำหรับ CSS topและleftกำลังautoเพื่อให้การตั้งค่าให้พวกเขาที่อาจจะเทียบเท่าขึ้นอยู่กับสิ่งที่คุณกำลังพยายามที่จะทำ:

$('.map').css('top', 'auto').css('left', 'auto');

คุณยังมีตัวเลือกในการลบstyleแอตทริบิวต์ทั้งหมด:

$('.map').removeAttr('style');

อย่างไรก็ตามหากคุณใช้องค์ประกอบ jQuery UI อื่น ๆ สิ่งเหล่านั้นอาจต้องมีสไตล์แบบอินไลน์ที่คุณไม่ต้องการที่จะถูกลบออกไปดังนั้นให้ดำเนินการด้วยความระมัดระวังที่นั่น


61
โดยปกติแล้วการเขียนทับดังกล่าวจะถูกเพิ่มลงในแอตทริบิวต์ลักษณะมีความหมายสำหรับการเปลี่ยนค่าออกจากค่าเริ่มต้น css การตั้งค่าเป็นอัตโนมัติจะไม่รีเซ็ตเป็นค่าเริ่มต้น ความหมายอัตโนมัติไม่เหมือนกันจริง ๆ แล้วไม่มีค่าเลย ดังนั้นคำตอบที่ถูกต้องจะเป็น $ ('map') css ('top', '');
dsomnus

15
คำตอบนี้ผิดคุณไม่ได้ลบคุณลักษณะ แต่แทนที่ด้วยสิ่งอื่น นอกจากนี้การลบแท็กสไตล์ทั้งหมดก็ไม่สมเหตุสมผลนักอาจต้องการเก็บผู้ดูแลและลบผู้อื่นออก .. คำตอบของ wtrevino คือสิ่งที่ถูกต้อง
อเล็กซ์

มันไม่ใช่ตัวเลือกที่สำคัญดังนั้นมันจึงมีดีมาก! :) สำหรับฟิลด์เช่นชื่อผู้ใช้
Dean Meehan

5
สำหรับบันทึกคำตอบของ @ wtrevino ควรเป็นคำตอบที่ได้รับการยอมรับที่นี่ วิธีแก้ปัญหาเฉพาะนี้ใช้ได้กับฉันในบางสถานการณ์ แต่ฉันจะลบคำตอบนี้ถ้าทำได้ น่าเสียดายเนื่องจากเป็นที่ยอมรับจึงไม่ยอมให้ฉัน
Rob Hruska

นี่ไม่ใช่คำตอบที่ถูกต้อง ... @wtrevino คำตอบนั้นถูกต้องที่สุด คำตอบนี้จะใช้ได้เฉพาะในกรณีที่คุณต้องการลบรูปแบบคงที่ทั้งหมดออกจากองค์ประกอบ ... ในกรณีส่วนใหญ่นี่ไม่ใช่สิ่งที่คุณต้องการ
Lars

427

หากคุณต้องการลบคุณลักษณะด้านบนและด้านซ้ายออกเป็นพิเศษและปล่อยให้คนอื่น ๆ คุณสามารถทำได้:

$('.map').css('top', '').css('left', '');

หรือเทียบเท่าที่สั้นกว่า:

$('.map').css({
    'top': '',
    'left': ''
});

64
นี่เป็นคำตอบที่ดีกว่าคำตอบที่เลือกไว้
phirschybar

อ๋อ นี่คือคำตอบที่ถูกต้อง ไม่เข้าใจในตอนแรกเนื่องจากดูเหมือนว่า ".css ('top', '')" เพียงแค่สร้างกฎ 'top' ที่ว่างเปล่า แต่ไม่มีมันจะลบออกทั้งหมด
Starkers

2
นี่คือคำตอบที่ดีที่สุด แต่ฉันคิดว่าฉันพบอีกอันหนึ่ง ฉันลองใช้ตัวอื่นสองสามตัว .css('left', undefined);ไม่ได้เปลี่ยนแปลงอะไร ผ่านโมฆะไม่ได้ทำอะไรทั้ง แต่.css('left', false);เอาคุณสมบัตินั้นออกไป
Viktor

ตามที่คนอื่น ๆ แนะนำสิ่งนี้ควรถูกพิจารณาว่าเป็นคำตอบที่ถูกต้อง

1
@Viktor โปรดทราบว่าเอกสารระบุอย่างชัดเจนว่าให้ใช้สตริงว่าง ฉันสงสัยว่าเท็จเกิดขึ้นกับการทำงานหรือไม่เพราะการบีบบังคับประเภทที่ไม่มีเอกสารที่จะหายไปในอนาคต? api.jquery.com/css
Jeremy Wadhams

37

คุณสามารถลบเนื้อหาทั้งหมดในstyleแอตทริบิวต์โดยทำ:

$('.map').removeAttr('style');

และคุณสามารถลบเฉพาะstyles โดยทำ:

$('.map').css('top', '');
$('.map').css('left', '');

30

เพียงตั้งค่าคุณสมบัติ CSS ด้วยสตริงว่างตัวอย่างเช่นด้วยรหัสต่อไปนี้:

$('#mydiv').css('color', '');

ดูเอกสาร jQuery ใน CSS


3
ไม่แน่ใจว่าทำไมนี่ไม่ใช่คำตอบที่ยอมรับได้ คำตอบที่ยอมรับจริงคือแฮ็คเพราะจริง ๆ แล้วมันไม่ได้ลบคุณสมบัติ CSS ออกจากวัตถุซึ่งเป็นชื่อของคำถาม
Paul Go

6
  1. ไปที่นี่: jQuery API
  2. Ctrl + F สำหรับ 'ลบ'
  3. อ่าน:

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

เอกสารให้แนวทางที่เป็นปัจจุบันแก่คุณในสิ่งที่คุณกำลังพยายามทำให้สำเร็จซึ่งมักจะช่วยคุณประหยัดเวลาเพราะคุณไม่จำเป็นต้องอ่านไปมาในกองเพลิงบนกองล้น (ไม่ว่าสนุก / รู้แจ้งก็ตาม) !)


5

ต่อรายงานบั๊ก JQuery นี้

element.removeAttr ( 'สไตล์')
ไม่ทำงานอย่างสม่ำเสมอในเบราว์เซอร์ที่ใช้ Webkit ตัวอย่างเช่นฉันพบปัญหานี้ใน iOS 6.1 การแก้ไขคือการใช้:
element.attr ('style', '')



2
$.fn.removeCss=function(prop){
   if(!prop){
          return $(this).removeAttr('style').removeAttr('class');
     }
    else{
         return $(this).css(prop,null);
    }

}

ถ้าคุณต้องการลบ css prop:

    $('#mydiv').removeCss('color');
//To remove all prop Css
    $('#mydiv').removeCss();

1

ในความคิดของฉันวิธีที่สะอาดที่สุดคือการลบคุณสมบัติทั้งหมดออกจากCSSStyleDeclarationขององค์ประกอบแทนที่จะเขียนทับมันด้วย null / zero / default บางประเภท:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");

0
$.fn.removeCss=function(toDelete){

    var props=$(this).attr('style').split(';');
var tmp=-1;
for( var p=0;p<props.length; p++){if(props[p].indexOf(toDelete)!==-1){tmp=p}};
if(tmp!==-1){

   delete props[tmp];
}

  return $(this).attr('style',props.join(';')+';');

}

ลบอย่างปลอดภัยด้วยปลั๊กอินนี้!

$ ( 'myDiv') removeCss ( 'สี').


0

มีบางสไตล์ที่ไม่สามารถนำออกได้ง่าย (มีอยู่ในใจ)

วิธีแก้ปัญหาคือการสร้างคลาสที่แตกต่างกัน 2 คลาสและเพิ่ม / ลบคลาสที่มีสไตล์ที่คุณต้องการ

ไม่ใช่ทางออกที่ดีที่สุดสำหรับคุณสมบัติของสไตล์ที่สามารถลบ / ปิดการใช้งานได้ง่าย


0

ในการลบสไตล์ CSS กำหนดสตริงว่างให้กับสไตล์

ในกรณีนี้

$('.map').css({top:'',left:''});

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