Невозможно удалить атрибут стиля в хроме

У меня возникают проблемы с удалением стилей из моего диапазона в Chrome. Он может иметь кучу разных стилей, которые могут быть применены к нему, поэтому мне нужно просто удалить его whoesale. Вот пример проблемы,

jsfiddle * требуется хром

removeAttr('style'), похоже, не удаляет тег стиля. Когда вы открываете панель отладки и выделяете диапазон, он начинает работать отлично.

Кто-нибудь знает, почему стиль не удаляется и как его удалить?

Ответ 1

Я решил попробовать одно. Изменение версии JQuery до 1.5.2, и она отлично работает в хроме. Таким образом, похоже, что это ошибка в последней версии JQuery. Я предлагаю вам просто использовать 1.5.2, если вы можете уйти от него или посоветовать пользователям Chrome менять браузеры. Вы также можете сделать это:

 } else {
   $('#s').attr('style');
   $('#s').removeAttr('style');    
 }

вместо этого:

 } else {
   $('#s').removeAttr('style');    
  }

для небольшого исправления ошибок/взлома.

http://jsfiddle.net/pjabT/7/

Ответ 2

Вместо того, чтобы пытаться удалить его, как насчет его сброса?

$("#someElement").attr("style","");

Ответ 3

.style, вероятно, заблокирован из-за его связи с CSS.

вы можете получить тот же эффект, просто очистив его с помощью

$('#s').attr('style','');

Ответ 4

Я не уверен, почему атрибут не удаляется, является ли функция .removeAttr() применимой для "стиля"?

Во всяком случае, я всегда подхожу к этому по-другому. Используется код вашего jsFiddle, он работает следующим образом

var t = true;

setInterval(function(){
    t = !t;
    if(t){
        $('#s').css({color: 'rgb(255, 0, 0)'});
    } else {
        $('#s').attr('style', '');    
    }
}, 1000);

Все, что я изменил, в основном это строка

$('#s').attr('style', '');   

где я просто устанавливаю значение атрибута style в значение ''

Ответ 5

С помощью css вы устанавливаете значения css для этого диапазона, а не атрибута

так что вам нужно просто изменить ваш script на этот

var t = true;

setInterval(function(){
    t = !t;
    if(t){
        $('#s').attr('style', "color: rgb(255, 0, 0)");
    } else {
        $('#s').removeAttr('style');    
    }
}, 1000);

Ответ 6

Я все еще работаю над этим, но вот быстрое решение:

var t = true;

setInterval(function(){
t = !t;
  if(t){
     $('#s').css('color','rgb(255, 0, 0)');
   } else {
    $('#s').css('color','rgb(0,0,0)');    
   }
}, 1000);

ОБНОВЛЕНИЕ: Интересно отметить, что этот код работает:

var t = true;

setInterval(function(){
t = !t;
  if(t){
    $('#s').css({color: 'rgb(255, 0, 0)'});
  } else {
     $('#s').attr('style');
     $('#s').removeAttr('style');    
 }
}, 1000);

Ответ 7

Ты в порядке, вроде. Проблема заключается в Webkit с элементом element.removeAttribute('style'), который не работает последовательно. Что теперь делает jQuery (1.6.4), которое, вероятно, было исправлено здесь: http://bugs.jquery.com/ticket/9699, сначала присваивает атрибуту style ничего атрибута element.setAttribute( 'style', ''), а затем удалите его, что, похоже, решит это.