видалення стилів HTML-елементів за допомогою


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 ("стиль"), все одно не пощастило. Я використовую 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', '');
Oiva Eskola

Це наблизило мене, але це не нуль, а „нічого”, що спрацювало, наприклад$("#id").css('display','none');
Аарон,

2
display: ніхто не має нічого спільного з цим запитанням чи відповіддю. Це для приховування елементів.
JasonWoof

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

5

Атрибут class може містити кілька стилів, тому ви можете вказати його як

<tr class="row-even highlight">

і виконайте маніпуляції з рядками, щоб видалити "виділення" з елемента.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 * виділити \ b /, ''); (Визначаючи .element у CSS, він також автоматично залишається незмінним скрізь.)
Чак Колларс

На жаль, клас забутої можливості вказано не раз. Щоб також обробляти цей випадок, додайте прапор 'g' до регулярного виразу: theElement.className = theElement.className.replace (/ \ / b \ s * виділення \ b / g, '');
Чак Колларс

використовувати властивість вузла списку класів замість 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.