博客园闪存分页是用JavaScript生成的,今天发现在IE8下点击页码不能翻页,翻页操作是在当前页码的onclick事件中进行的。

根据大体上的意思我感觉js
setAttribute与jquery中attr工作是完全一样的,只是jquery中简写了并且工能更强大了,下面我来分别介绍一下他们的用法。

开始代码是这么写的:复制代码 代码如下:var
a = document.createElement;a.setAttribute(“onclick”,
this.ClickFunctionName +
“;Pager.SetCurrent;由于IE8不支持setAttribute方法,这里添加的onclick事件处理程序并未添加上。

setAttribute(string name, string
value):增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。
1、样式问题

后来改为jQuery的attr方法:复制代码
代码如下:$.attr(“onclick”, this.ClickFunctionName + “;Pager.SetCurrent;

setAttribute(“class”,
value)中class是指改变”class”这个属性,所以要带引号。
vName代表对样式赋值。

这样虽然添加上去了,但不管怎么点击,onclick事件处理程序就是不执行,Chrome与Firefox都没这个问题。

例如:

最终通过下面的代码解决了问题:复制代码
代码如下:var js = this.ClickFunctionName +
“;Pager.SetCurrent;”;a.onclick = function; }

 代码如下

复制代码

var input = document.createElement(“input”);
input.setAttribute(“type”, “text”);
input.setAttribute(“name”, “q”);
input.setAttribute(“class”,bordercss);

输出时:<input type=”text” name=”q”
class=”bordercss”>,即,input控件具有bordercss样式属性
注意:class属性在W3C
DOM中扮演着很重要的角色,但由于浏览器差异性仍然存在。
使用setAttribute(“class”,
vName)语句动态设置Element的class属性在firefox中是行的通的,但在IE中却不行。因为使用IE内核的浏览器不认识”class”,要改用”className”;
同样,firefox 也不认识”className”。所以常用的方法是二者兼备:

 代码如下

复制代码

element.setAttribute(“class”, value); //for firefox
element.setAttribute(“className”, value); //for IE

2、方法属性等问题

例如:

 代码如下

复制代码

var bar = document.getElementById(“testbt”);
bar.setAttribute(“onclick”, “javascript:alert(‘This is a test!’);”);

这里利用setAttribute指定e的onclick属性,简单,很好理解。
但是IE不支持,IE并不是不支持setAttribute这个函数,而是不支持用setAttribute设置某些属性,例如对象属性、集合属性、事件属性,也就是说用setAttribute设置style和onclick这些属性在IE中是行不通的。
为达到兼容各种浏览器的效果,可以用点符号法来设置Element的对象属性、集合属性和事件属性。

 代码如下

复制代码

document.getElementById(“testbt”).className = “bordercss”;
document.getElementById(“testbt”).style.cssText = “color: #00f;”;
document.getElementById(“testbt”).style.color = “#00f”;
document.getElementById(“testbt”).onclick= function () { alert(“This is
a test!”); }

在不同浏览器上的不同表现

一、setAttribute的问题

elementNode为<tr>…</tr>

希望对其增加一个单击行的事件处理函数,
写法1:
table1row1.setAttribute(“onclick”, “selectrow1(this)”);
IE8, Firefox, google chrome 能正确触发click 事件
home88一必发,IE6,IE7则不能触发click 事件。
写法2:
table2row1.onclick = function() { selectrow2(this) };
所有测试浏览器均能触发click 事件

故为了兼容在不同的IE中,我们可以统一使用如下语句。
table2row1.onclick = function() { selectrow2(this) };

jquery 定义和用法

attr() 方法设置或返回被选元素的属性值。

根据该方法不同的参数,其工作方式也有所差异。
返回属性值
返回被选元素的属性值。

语法

$(selector).attr(attribute)参数 描述

设置多个属性/值对

为被选元素设置一个以上的属性和值。

语法

$(selector).attr({attribute:value, attribute:value …})参数 描述
attribute:value 规定一个或多个属性/值对。

attribute 规定要获取其值的属性。

用法一: $(选择器).attr(属性名) 它的作用就是获取指定元素( $(选择器)部分
)的指定属性的值. 看例子:

有这样一段html:

 

 代码如下

复制代码

<img src=“/lpic/s3791510.jpg” alt=“变形金刚海报” width=“500″
height=“300″ />

 

那么你要获取到图片的地址该怎么办呢? 这样: $(”img”).attr(”src”)
就这么简单, 你用alert或者其它形式输出一下就看到图片的地址了.
那么我要取得图片的描述呢? 这样: $(”img”).attr(”alt”) .够简单吧.
它不但可以取到html本身有的属性, 而且也能取到你自己定义的属性,
比如上例中的 funny属性, 自己试试能不能获取到它的值. 注意:
如果你要获取的属性是不存在的, 那么jquery就会返回一个 undefined .

用法二: $(选择器).attr(属性名, 属性值)
它的作用是为所有匹配的元素设置一个属性值。

假如页面中有一堆这样的html:

 代码如下

复制代码

 

<img /><img />

 

我们写一句这样的jquery代码:
$(”img”).attr(”src”,”)
这样上面一堆无意义的img标签就变成了:

 代码如下

复制代码

 
<img src=“/s3791510.jpg” /><img src=“/s3791510.jpg” />

 

很容易理解吧. 假如我们想给图片设置高度,那么只要
$(”img”).attr(”height”,”300″) . 再要设置宽度就这样:
$(”img”).attr(”width”,”500″) . 如此看来是没有什么问题,
但是当要设置多个属性时, 一个一个的这样写真是太麻烦了,
那么我们来看第三个用法.

用法三: $(选择器).attr(Map) 它的意思就是给指定元素设置多个属性值,
我们重点看一下 Map 是什么意思. 它其实是这样一种序列:

{属性名一: “属性值一” , 属性名二: “属性值二” , … … }

那么我要实现用法二中的例子只要这样写:

 代码如下

复制代码

$(“img”).attr({src:“/s3791510.jpg” , height: “300″ , width : “500″})

以上我们学会了获取属性值, 设置属性值, 那么怎么删除属性呢?

jquery中删除属性的关键词是: removeAttr 注意A是大写的. 看看怎么用的:

同样是用法一中的html代码, 我想删掉图片的高度属性, 那么就这样:

$(“img”). removeAttr(“height”);

嗯,就这么简单.  attr 其实就是原生js中 getAttribute 的简化实现,
而removeAttr 就是 removeAttribute 的简写了

例子

 

 代码如下

复制代码

<script language=”javascript” type=”text/javascript”>
$(document).ready(function(){
//$(‘div.chapter a’).attr({‘rel’:’external’});
$(‘div.chapter a’).each(function(index){
var $linkthis=$(this)
$linkthis.attr({
‘rel’:’external’,
‘id’:’wikilink-‘+index,
‘title’:’你好,现在在试验’+$linkthis.text()
});
});
$(‘#wikilink-1’).css(‘fontSize’,33);
});
</script>

setAttribute与jquery中attr工作是完全一样的,只是jquery中简写了并且工能更强大了,下面我来分别介绍一下他们的用…

相关文章