Xóa các thuộc tính hàng đầu CSS và các trang còn lại của CSS với jQuery


169

Tôi đang xây dựng một bản đồ có thể kéo mà khi bản đồ được kéo, phần tử được cung cấp một thuộc tính 'trái' và 'trên cùng' với các giá trị cho mỗi ...

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

Tôi có một nút mà tôi muốn xóa thuộc tính trên cùng và bên trái khỏi kiểu nội tuyến trên div khi nhấp vào, Điều này có thể với jquery không?


9
Vâng, đúng vậy. Ít nhất bạn có thể đặt chúng thành một giá trị trống, loại bỏ nó.
Felix Kling

Có thể trùng lặp: Xóa thuộc tính CSS bằng Jquery . Các câu trả lời có thể hữu ích cho bạn.
Drew Gaynor

Lưu ý rằng ' 'không được tính là một giá trị trống''
Peter Berg

3
Để chỉ xóa một thuộc tính css tại một thời điểm: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar

Chỉ dành cho bản ghi, cài đặt thành trống không phải lúc nào cũng hoạt động: "Đặt giá trị của thuộc tính kiểu thành chuỗi trống ... Tuy nhiên, không xóa một kiểu đã được áp dụng với quy tắc CSS trong biểu định kiểu hoặc < phong cách> yếu tố. " - xem stackoverflow.com/questions/27791484/
Mạnh

Câu trả lời:


139

Các giá trị mặc định cho CSS topleftauto, do đó, đặt chúng thành giá trị đó có thể tương đương tùy thuộc vào những gì bạn đang cố gắng thực hiện:

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

Bạn cũng có tùy chọn loại bỏ hoàn toàn stylethuộc tính:

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

Tuy nhiên, nếu bạn đang sử dụng các thành phần UI jQuery khác, chúng có thể yêu cầu các kiểu nội tuyến mà bạn không muốn xóa, vì vậy hãy thận trọng ở đó.


61
thông thường ghi đè như vậy được thêm vào thuộc tính style có nghĩa là để thay đổi giá trị tắt từ giá trị css mặc định; thiết lập nó thành tự động không đặt lại chúng về giá trị mặc định. có nghĩa là tự động không thực sự giống nhau sau đó không có giá trị nào cả. vì vậy câu trả lời đúng sẽ là $ ('map'). css ('top', '');
DSomnus

15
Câu trả lời này là sai, bạn không xóa thuộc tính mà thay thế chúng bằng thứ khác. Ngoài ra, việc xóa toàn bộ thẻ kiểu không có ý nghĩa nhiều, người ta có thể muốn giữ một số attrs và xóa những người khác .. câu trả lời của wtrevino là câu trả lời đúng.
Alex

Nó không phải là một lựa chọn thiết yếu vì vậy có nó là tuyệt vời! :) Đối với các trường như tên người dùng
Dean Meehan

5
Đối với hồ sơ, câu trả lời của @ wtrevino nên được chấp nhận ở đây. Giải pháp đặc biệt này có hiệu quả với tôi trong một số trường hợp, nhưng tôi sẽ xóa câu trả lời này nếu có thể. Thật không may, vì nó được chấp nhận, nó sẽ không cho phép tôi.
Rob Hruska

Đây không phải là câu trả lời đúng ... câu trả lời @wtrevino là đúng nhất. Câu trả lời này sẽ chỉ hoạt động nếu bạn muốn xóa tất cả các kiểu tĩnh khỏi phần tử ... trong hầu hết các trường hợp, đây không phải là điều bạn muốn làm.
Lars

427

Nếu bạn muốn loại bỏ cụ thể các thuộc tính trên cùng và bên trái và để lại các thuộc tính khác, bạn có thể thực hiện việc này:

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

Hoặc, tương đương ngắn hơn:

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

64
Đây là một câu trả lời tốt hơn so với câu trả lời được chọn.
phirschybar

Vâng. Đây là câu trả lời đúng. Ban đầu không có ý nghĩa gì, vì có vẻ như ".css ('top', '')" chỉ đơn giản là tạo ra một quy tắc 'top' trống rỗng, nhưng không, nó sẽ loại bỏ hoàn toàn.
Starkers

2
Đây là câu trả lời tốt nhất chưa. Nhưng tôi nghĩ rằng tôi đã tìm thấy một số khác. Tôi đã thử một vài cái khác nhau. .css('left', undefined);không thay đổi gì cả. Vượt qua null cũng không làm gì cả. Nhưng .css('left', false);loại bỏ tài sản đó.
Viktor

Như những người khác đã đề xuất, điều này nên được coi là câu trả lời chính xác.

1
@Viktor Lưu ý rằng tài liệu nói rõ ràng sử dụng chuỗi rỗng. Tôi tự hỏi nếu sai xảy ra để làm việc vì một số loại cưỡng chế không có giấy tờ có thể biến mất trong tương lai? api.jquery.com/css
Jeremy Wadhams

37

Bạn có thể xóa tất cả nội dung trong stylethuộc tính bằng cách thực hiện:

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

Và bạn có thể xóa styles cụ thể bằng cách thực hiện:

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

30

Chỉ cần đặt thuộc tính CSS bằng một chuỗi rỗng, ví dụ với đoạn mã sau:

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

Xem Tài liệu jQuery trên CSS .


3
Không chắc chắn tại sao đây không phải là câu trả lời được chấp nhận. Câu trả lời được chấp nhận thực tế là hacky vì nó không thực sự loại bỏ thuộc tính CSS khỏi đối tượng, đó là tiêu đề của câu hỏi.
Paul Go

6
  1. Tới đây: API jQuery
  2. Ctrl + F để 'xóa'
  3. Đọc:

Đặt giá trị của thuộc tính kiểu thành một chuỗi trống - ví dụ $ ("#mydiv") .css ("color", "") - xóa thuộc tính đó khỏi một thành phần nếu nó đã được áp dụng trực tiếp, cho dù theo kiểu HTML thuộc tính, thông qua phương thức .css () của jQuery hoặc thông qua thao tác DOM trực tiếp của thuộc tính style.

Các tài liệu cung cấp cho bạn cách tiếp cận hiện tại, được đề xuất cho những gì bạn đang cố gắng thực hiện, điều này thường có thể giúp bạn tiết kiệm thời gian vì bạn không phải đọc đi đọc lại các cuộc chiến ngọn lửa trên tràn ngăn xếp (cho dù điều đó có thú vị / giác ngộ đến mức nào !).


5

Mỗi báo cáo lỗi JQuery này

phần tử.removeAttr ('phong cách')
không hoạt động nhất quán trong các trình duyệt dựa trên Webkit. Ví dụ, tôi đã gặp vấn đề này trên iOS 6.1. Cách khắc phục là sử dụng:
Element.attr ('style', '')


2

Nếu bạn muốn loại bỏ tất cả, bạn có thể làm

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

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

}

sau đó nếu bạn muốn loại bỏ css prop (s):

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

1

Theo tôi, cách sạch nhất là loại bỏ hoàn toàn thuộc tính khỏi CSSStyleDeclaration của phần tử , thay vì chỉ ghi đè lên nó bằng một loại giá trị 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(';')+';');

}

Xóa an toàn với plugin này!

$ ('myDiv'). removeCss ('màu');


0

Có một số kiểu không thể dễ dàng loại bỏ. (Tràn đến tâm trí)

Một cách giải quyết khác là tạo 2 lớp khác nhau và thêm / xóa lớp chứa kiểu bạn muốn.

KHÔNG phải là giải pháp tốt nhất cho các thuộc tính kiểu có thể dễ dàng loại bỏ / vô hiệu hóa.


0

Để xóa kiểu css, gán một chuỗi rỗng cho kiểu

trong trường hợp này

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.