时间:2021-07-01 10:21:17 帮助过:2人阅读
function styleHeaderSibling( ){
if(!document.getElementsByTagName) return false;
//探测浏览器是否支持“getElementsByTagName”方法(个别浏览器并不支持DOM)
var headers=document. getElementsByTagName(“hl”);
for(var=0;i<headers.length;i++){
var elem=getNextElement(headers[i].nextSibling);
elem.style.fontWeight=”bold”;
elem.style.fontsize=”1.2em”;
}
}
function getNextElement(node){
if(node.nodeType==1){ //此节点为文本节点
return node;
}
if(node.nextSibling){
retnrn getNextElement(node.nextSibling);
}
return null;
}
不足:让“行为层”去完成“表现层”工作,当需要改变DOM脚本设置的样式信息时,修改起来很麻烦,如果能给所要设置样式的节点声明一个class属性,那么修改起来就会很简单。例如我们可以对上述例子做出如下修改:
代码如下:
function styleHeaderSibling( ){
if(!document.getElementsByTagName) return false;
//探测浏览器是否支持“getElementsByTagName”方法
var headers=document. getElementsByTagName(“hl”);
for(var=0;i<headers.length;i++){
var elem=getNextElement(headers[i].nextSibling);
elem.className=”intro”;
//给某元素设置class属性值的语法为:elements.className=value
}
}
由于此技巧有一不足之处:若该元素原本具有class属性值的话,那么原本的属性值就会被新的属性值所覆盖,原来的样式就会丢失,所有我们要在元class属性值的基础上追加新的属性值,而不是覆盖,方法如下:
代码如下:
function addClass(element,value){
if(!element.className){
element.className=value;
}else{
newclassName=element.className;
newclassName +=" "; // 注意这个空格
newclassName +=value;
element.className=newclassName;
}
}
接着把上面的函数修改一下就可以了:
代码如下:
function styleHeaderSibling( ){
if(!document.getElementsByTagName) return false;
//探测浏览器是否支持“getElementsByTagName”方法
var headers=document. getElementsByTagName(“hl”);
for(var=0;i<headers.length;i++){
var elem=getNextElement(headers[i].nextSibling);
addClass(elem,”intro”);
}
}
说明:一般情况下,用DOM去设置样式是很不明智的,此方法只在CSS没办法按要求设置样式来充实页面内容的时候才用。