天天看點

dom修改css樣式

CSS-DOM:
style屬性是對象類型
nodeName是tring類型
如果文檔的内容需要定期編輯和重新整理 添加class屬性的工作就會變成一種負擔 
 如果文檔内容需要一個CMS來處理  給文檔内容的個别部分添加class屬性或者其他樣式的做法有時是不被允許的
font-size屬性要用元素.style.fontSize來檢索

考慮純粹用css還是用DOM設定樣式 需要考慮這些問題:
1最簡單的解決方案
2.那種解決方案得到更多浏覽器的支援
一般改變元素的呈現效果用css
改變某元素的行為用dom
如果是根據行為改變呈現效果  那就要考慮情況了  例子:+

響應事件:  可以使用僞class屬性允許我們根據html元素的狀态來改變樣式 比如 
a:hover{
    color:#c60;
}  這個僞類基本上隻是用來改變連結的樣式

利用DOM可以實作 滑鼠移動到某表格的行時字型加黑加粗
function rowsd(){
    if(!document.getElementByTagName) return false;
    var rows=document.getElementByTagName("tr");
    for(var i=0;i<rows.length;i++){
        rows[i].onmouseover=function(){
            this.style.fontWeight="bold";    //指目前行
        }
        rows[i].onmouseout=function(){
            this.style.fontWeight="normal";
        }
    )
}
addLoadEvent(rowsd);
元素的屬性style隻有在内聯的時候才可以檢索  如果script放在head或者css外部調用的時候 style是無法擷取資訊的  
但是 還可以通過style來設定各種html呈現效果 是可以用style檢索的 你用dom設定的樣式也可以用dom來檢索 舉例:
function getNextElement(node) {
  if(node.nodeType == 1) {
    return node;
  }
  if (node.nextSibling) {
    return getNextElement(node.nextSibling);
  }
  return null;
}

function xx(){
    var headers=document.getElement("h1");
    for(var i;i<headers.length;i++){
        var elem=getNextElement(headers[i].nextSibling);
        elem.style.fontWeight="bold";
        elem.style.fontSize="1.2em";       //通過DOM來設定css 就可以通過style來檢索了
    }

}
在事件發生時設定有關元素的樣式
根據某種條件反複設定某種樣式
html:
<body>
  <table>
    <caption>Itinerary</caption>
    <thead>
    <tr>
      <th>When</th>
      <th>Where</th>
    </tr>
    </thead>
    <tbody>
    <tr>
      <td>June 9th</td>
      <td>Portland, <abbr title="Oregon">OR</abbr></td>
    </tr>
    <tr>
      <td>June 10th</td>
      <td>Seattle, <abbr title="Washington">WA</abbr></td>
    </tr>
    <tr>
      <td>June 12th</td>
      <td>Sacramento, <abbr title="California">CA</abbr></td>
    </tr>
    </tbody>
  </table>
</body>
css:
body {
  font-family: "Helvetica","Arial",sans-serif;
  background-color: #fff;
  color: #000;
}
table {
  margin: auto;
  border: 1px solid #699;
}
caption {
  margin: auto;
  padding: .2em;
  font-size: 1.2em;
  font-weight: bold;
}
th {
  font-weight: normal;
  font-style: italic;
  text-align: left;
  border: 1px dotted #699;
  background-color: #9cc;
  color: #000;
}
th,td {
  width: 10em;
  padding: .5em;
}
.odd {
  background-color: #ffc;
}

js:
function  stritable(){
    if(!document.getElementByTagName) return false;
    var tables=document.getElementByTagName("table");
    var odd,rows;
    for(var i=0;i<tables.length;i++){
        odd=false;
        rows=tables[i].getElementByTagName("tr");
        for(var j=0;j<rows.length;j++){
            if(odd){
                    rows[i].style.backgroundColor="#ffc";
                    odd=false;
            }else{
                odd=true;
            }
        }
    }
}


但是這樣子 如果需要修改就需要尋找這個函數 然後修改 比較麻煩
可以采用這個方法:
elem.setAttribute("class","intro");
也可以用 className屬性完成  元素節點才有
元素.className=value;
這樣 在value樣式類中修改即可
可是這樣子就是直接覆寫掉了
如果想要追加可以這樣
elem.className+=" intro";    intro前面有空格

現在css樣式裡面添加一i套聲明   這樣隻要修改add就可以來改變樣式了
.add{
    background-color:#ffc;
}
舉例:function stripeTables() {
  if (!document.getElementsByTagName) return false;
  var tables = document.getElementsByTagName("table");
  for (var i=0; i<tables.length; i++) {
    var odd = false;
    var rows = tables[i].getElementsByTagName("tr");
    for (var j=0; j<rows.length; j++) {
      if (odd == true) {
        addClass(rows[j],"odd");
        odd = false;
      } else {
        odd = true;
      }
    }
  }
}
function addClass(element,value) {
  if (!element.className) {
    element.className = value;
  } else {
    newClassName = element.className;
    newClassName+= " ";
    newClassName+= value;
    element.className = newClassName;
  }
}
addLoadEvent(stripeTables);

要學會對函數進行抽象 可以增加通用性 如:
function stripeTables(Tag,Name) {
  if (!document.getElementsByTagName) return false;
  var tables = document.getElementsByTagName(Tag);
  for (var i=0; i<tables.length; i++) {
    var odd = false;
    var rows = tables[i].getElementsByTagName("tr");
    for (var j=0; j<rows.length; j++) {
      if (odd == true) {
        addClass(rows[j],Name);
        odd = false;
      } else {
        odd = true;
      }
    }
  }
}           

繼續閱讀