2009-06-24 38 views
47

Tôi đang cố gắng thay thế giá trị thẻ kiểu nội tuyến của phần tử. Phần tử hiện tại trông giống như sau:xoá kiểu phần tử html qua javascript

`<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">` 

và tôi muốn xóa tất cả nội dung theo phong cách của nó chứ không phải kiểu nội tuyến. Tôi đã thử xóa element.style; và element.style = null; và element.style = ""; không có kết quả. Mã hiện tại của tôi vi phạm tại các tuyên bố này. Toàn bộ chức năng trông giống như:
chức năng 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"); 
} 

các clearInterval hoạt động nhưng cảnh báo không bao giờ cháy và nền vẫn như cũ. Bất cứ ai nhìn thấy bất kỳ vấn đề? Cảm ơn trước ...


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"); 
} 
+0

Cố gắng removeAttribute ("phong cách"), vẫn không có may mắn. Tôi đang sử dụng setInterval để chuyển qua màu nền để (cố gắng) tạo hiệu ứng xung. Tôi sẽ thử viết một số lớp phong cách khác để thử trả lời 4. Có ý tưởng nào khác không? Mã hiện tại của tôi được đăng bên dưới ... – danwoods

+0

nó sẽ là tuyệt vời nếu bạn chấp nhận [this] (http://stackoverflow.com/a/1040439/2008111) là câu trả lời đúng cho câu hỏi này – caramba

+0

^Nó không phải là câu trả lời đúng , Tuy nhiên. –

Trả lời

106

bạn chỉ có thể làm: element.removeAttribute("style")

+3

thanh lịch với MAX – sidonaldson

+26

Hoặc 'element.style.cssText = null', cũng giống như vậy. – mrec

+1

@mrec không giống hệt nhau, trong trường hợp của bạn một phần tử vẫn còn trống thuộc tính 'style' – user

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

nếu bạn đang sử dụng jQuery sau đó

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

Hai đoạn mã đó thực hiện những điều cực kỳ khác nhau. Chỉ có điều đầu tiên có liên quan đến câu hỏi. – JasonWoof

+0

@ JasonWoof Tôi đồng ý. –

4

Thuộc tính lớp có thể chứa nhiều phong cách, để bạn có thể chỉ định nó là

<tr class="row-even highlight"> 

và làm chuỗi thao tác để xóa 'điểm nhấn' từ element.className

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

Sử dụng jQuery sẽ làm đơn giản này là bạn có phương pháp

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

mà sẽ cho phép bạn để chuyển đổi đánh dấu dễ dàng

+0

Một ưu điểm khác của việc xác định .highlight trong bảng định kiểu của bạn là bạn có thể thay đổi chính xác cách "đánh dấu" được hiển thị bằng cách chỉ thay đổi một dòng CSS và không thực hiện bất kỳ thay đổi Javascript nào cả. Nếu bạn _not_ bằng cách sử dụng JQuery, việc thêm và loại bỏ một lớp vẫn còn khá đơn giản:/* on */theElement.className + = 'highlight';/* off */theElement.className = theElement.className.replace (/ \ b \ s * đánh dấu \ b /, ''); (Bằng cách định nghĩa .element trong CSS, nó cũng tự động duy trì _same_ ở mọi nơi.) –

+0

Rất tiếc, lớp khả năng bị quên được chỉ định nhiều lần. Để xử lý trường hợp đó, hãy thêm cờ 'g' vào biểu thức chính quy: theElement.className = theElement.className.replace (/ \/b \ s * highlight \ b/g, ''); –

+0

sử dụng thuộc tính nút danh sách lớp thay vì className –

44

Trong JavaScript:

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

Trong jQuery:

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

Dòng đầu tiên của mã xuất hiện hoặc là lỗi trong Internet Explorer (<9) với' ' Đối số không hợp lệ'' hoặc làm cho phần tử biến mất hoàn toàn trong IE> = 9. Đặt '' getElementById ("id"). Style.display = '' '', là chuỗi rỗng, xuất hiện để hoạt động trên các trình duyệt. – davidjb

+2

trong jQuery cách chính xác để loại bỏ kiểu là '$ (" # id ") .ss ('display', '');' –

+0

Điều này đã cho tôi đóng, nhưng nó không phải là rỗng, nhưng 'không' đã làm việc , ví dụ '$ (" # id "). css ('display', 'none');' – Aaron

1

Sử dụng

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

Đối với javascript mẹ đẻ

Các vấn đề liên quan