การลบสไตล์องค์ประกอบ 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 ("style") แล้วยังไม่มีโชค ฉันใช้ setInterval เพื่อหมุนเวียนสีพื้นหลังเพื่อ (พยายาม) สร้างเอฟเฟกต์พัลส์ ฉันจะลองเขียนคลาสสไตล์อื่น ๆ เพื่อลองตอบข้อ 4 ความคิดอื่น ๆ อีกไหม รหัสปัจจุบันของฉันโพสต์ไว้ด้านล่าง ...
danwoods

มันจะดีมากถ้าคุณยอมรับว่านี่เป็นคำตอบที่ถูกต้องสำหรับคำถามนี้
caramba

^ มันไม่ใช่คำตอบที่ถูกต้อง
Evan Hendler

คำตอบ:


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

แอตทริบิวต์คลาสสามารถมีได้หลายสไตล์ดังนั้นคุณจึงสามารถระบุเป็น

<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'; / * off * / theElement.className = theElement.className.replace (/ \ b \ s * เน้น \ b /, ''); (ด้วยการกำหนด. องค์ประกอบใน CSS มันจะยังคงเหมือนเดิมโดยอัตโนมัติทุกที่ด้วย)
Chuck Kollars

อ๊ะลืมระบุคลาสความเป็นไปได้มากกว่าหนึ่งครั้ง ในการจัดการกรณีนั้นด้วยให้เพิ่มแฟล็ก 'g' ในนิพจน์ทั่วไป: theElement.className = theElement.className.replace (/ \ / b \ s * highlight \ b / g, '');
Chuck Kollars

ใช้คุณสมบัติโหนดคลาสลิสต์แทน className
Shishir Arora




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.