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

Использовать

particular_node.classList.remove("<name-of-class>")

Для нативного javascript

Шишир Арора
источник
2

В jQuery вы можете использовать

$(".className").attr("style","");
Альмхар
источник
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>

ßãlãjî
источник