удаление стилей элементов html через javascript


91

Я пытаюсь заменить значение тега встроенного стиля элемента. Текущий элемент выглядит так:

`<tr class="row-even" style="background: red none repeat scroll 0% 0%; position: relative; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" id="0000ph2009-06-10s1s02">`

и я хотел бы удалить все эти стилевые элементы, чтобы они были стилизованы под его класс, а не на встроенный стиль. Я пробовал удалить element.style; и element.style = null; и element.style = ""; но безрезультатно. Мой текущий код ломается в этом заявлении. Вся функция выглядит так:
function unSetHighlight (index) {

if(index < 10)
index = "000" + (index);
else if (index < 100)
  index = "000" + (index);
  else if(index < 1000)
    index = "0" + (index);
    if(index >= 1000)
      index = index;

var mainElm = document.getElementById('active_playlist');
var elmIndex = "";

for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){
  if(currElm.nodeType === 1){

  var elementId = currElm.getAttribute("id");

  if(elementId.match(/\b\d{4}/)){

    elmIndex = elementId.substr(0,4);


    if(elmIndex == index){
      var that = currElm;
      //that.style.background = position: relative;
      }
    }
  }
}

clearInterval(highlight);
alert("cleared Interval");
that.style.background = null;

alert("unSet highlight called");
}

clearInterval работает, но предупреждение никогда не срабатывает, а фон остается прежним. Кто-нибудь видит какие-либо проблемы? Заранее спасибо...


function unSetHighlight(index){  
  alert(index);  
  if(index < 10)  
    index = "000" + (index);  
    else if (index < 100)  
      index = "000" + (index);  
      else if(index < 1000)  
        index = "0" + (index);  
        if(index >= 1000)  
          index = index;  

    var mainElm = document.getElementById('active_playlist');
    var elmIndex = "";

    for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){
      if(currElm.nodeType === 1){

      var elementId = currElm.getAttribute("id");

      if(elementId.match(/\b\d{4}/)){

        elmIndex = elementId.substr(0,4);
        alert("elmIndex = " + elmIndex + "index = " + index);


        if(elmIndex === index){
          var that = currElm;
          alert("match found");
          }
        }
      }
    }

    clearInterval(highlight);
    alert("cleared Interval");
    that.removeAttribute("style");

    //that.style.position = "relative";
    //reColor();
    alert("unSet highlight called");
}

Пробовал removeAttribute ("style"), все равно не повезло. Я использую setInterval для циклического переключения цветов фона, чтобы (попытаться) создать импульсный эффект. Я попробую написать несколько других классов стилей, чтобы попробовать ответить 4. Есть другие идеи? Мой текущий код размещен ниже ...
danwoods

было бы замечательно, если бы вы приняли это как правильный ответ на этот вопрос
caramba

^ Однако это неправильный ответ.
Эван Хендлер

Ответы:


183

вы можете просто сделать:

element.removeAttribute("style")

51
Или element.style.cssText = null, что делает то же самое.
mrec

4
@mrec не совсем то же самое, в вашем случае элемент все еще имеет пустой styleатрибут
пользователь

5
Это отвечает на вопрос OP - удалить все встроенные стили и вернуться к правилам таблицы стилей, но ... он также удаляет все встроенные стили. Если вы хотите выборочно удалить правила из встроенных стилей, ответ @ sergio ниже (на самом деле, комментарий davidjb к этому ответу) более полезен.
ericsoco

72

В JavaScript:

document.getElementById("id").style.display = null;

В jQuery:

$("#id").css('display',null);

15
Первая строка кода указывает либо на ошибку в Internet Explorer (<9), Invalid argumentлибо на полное исчезновение элемента в IE> = 9. Параметр getElementById("id").style.display = '', являющийся пустой строкой, работает во всех браузерах.
davidjb

2
в jQuery правильный способ удалить стиль$("#id").css('display', '');
Ойва Эскола

Это помогло мне приблизиться, но это было не null, а 'none', которое сработало, например$("#id").css('display','none');
Aaron

2
display: none не имеет ничего общего с этим вопросом или ответом. Это для сокрытия элементов.
JasonWoof 05

1
Есть также то, CSSStyleDeclaration.removeProperty()что imho намного чище, чем нулевое присвоение. См developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/...
Sjeiti

12
getElementById("id").removeAttribute("style");

если вы используете jQuery, тогда

$("#id").removeClass("classname");

4
Эти два фрагмента кода делают совершенно разные вещи. Только первое имеет какое-то отношение к вопросу.
JasonWoof 05

5

Атрибут class может содержать несколько стилей, поэтому вы можете указать его как

<tr class="row-even highlight">

и выполните манипуляции со строкой, чтобы удалить «выделение» из element.className

element.className=element.className.replace('hightlight','');

Использование jQuery упростит это, поскольку у вас есть методы

$("#id").addClass("highlight");
$("#id").removeClass("hightlight");

это позволит вам легко переключать выделение


Еще одно преимущество определения .highlight в таблице стилей заключается в том, что вы можете точно изменить способ отображения «выделения», просто изменив одну строку CSS и вообще не делая никаких изменений Javascript. Если вы не используете JQuery, добавить и удалить класс все равно довольно просто: / * on * / theElement.className + = 'highlight'; / * выкл. * / theElement.className = theElement.className.replace (/ \ b \ s * highlight \ b /, ''); (Определив .element в CSS, он автоматически остается неизменным и везде.)
Чак Колларс

Упс, забытый класс возможности указан более одного раза. Чтобы обработать и этот случай, добавьте к регулярному выражению флаг 'g': theElement.className = theElement.className.replace (/ \ / b \ s * highlight \ b / g, '');
Чак Колларс

использовать свойство узла classlist вместо className
Арора



1

Полное удаление стиля, а не только значение NULL

document.getElementById("id").removeAttribute("style")

0

Удалить removeProperty

var el=document.getElementById("id");


el.style.removeProperty('display')

console.log("display removed"+el.style["display"])

console.log("color "+el.style["color"])
<div id="id" style="display:block;color:red">s</div>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.