удаление стилей элементов 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.