Javascript中 a.href 和 a.getAttribute('href') 结果不完全一致

今天无意中发现这个么问题,页面上对所有A标签的href属性为空的自动添加一个链接地址,结果发现if判断条件始终都没生效,莫名其妙。

原来Javascript中 a.href 和 a.getAttribute(‘href’) 结果在某些情况下是不完全一致的,以前从来都没注意过这个问题。

下面举个栗子:

<a href="">测试1</a>
<a href="#">测试2</a>
<a href="javascript:void(0)">测试3</a>
<script type="text/javascript">
var a = document.getElementsByTagName("a");
var it, href, href2;
for (var i=0; i<a.length; i++) {
    it = a.item(i);
    href = it.href;
    href2 = it.getAttribute('href');
    if (it.href == '' || it.href == '#') console.log('it.href: ', it.innerHTML);
    if (it.getAttribute('href') == '' || it.getAttribute('href') == '#') console.log('it.getAttribute("href"): ', it.innerHTML);
    console.log('['+ href +"]\t\t"+ (href == href2 ? '==' : '!=') +"\t\t["+ href2 +']');+']');
}
</script>

看看“测试一”和“测试二”,你可能以为 a.href 会输出 空字符串 和 # 号,但实际上他输出的是当前页面地址+# ,以前一直都没注意这么个问题。

// 对于 "测试一" 和 "测试二" 这个判断是不会生效的
if (it.href == '' || it.href == '#') console.log('it.href: ', it.innerHTML);

应该使用 getAttribute 方法来获取属性值

// 这样才正确
if (it.getAttribute('href') == '' || it.getAttribute('href') == '#') console.log('it.getAttribute("href"): ', it.innerHTML);

对比结果

另外测试了下 form 表单的 action 属性也是一样的

时间: 2024-10-25 15:59:41

Javascript中 a.href 和 a.getAttribute(&#39;href&#39;) 结果不完全一致的相关文章

javascript中createElement的两种创建方式

  本文实例讲述了javascript中createElement的两种创建方式.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <html xmlns="http://www.w3.org/1999/xhtml"> &l

javascript中innerText和innerHTML属性用法实例分析

  本文实例讲述了javascript中innerText和innerHTML属性用法.分享给大家供大家参考.具体分析如下: 几乎所有DOM元素都有innerText,innertHTML属性(注意大小写),分别是元素标签内 的文本表示形式和HTML源代码,这两个属性是可读可写的 innerHTML也可以取代createElement,属于简单,粗放型,后果自负的创建 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

JavaScript中property和attribute的区别详细介绍

 这篇文章主要介绍了JavaScript中property和attribute的区别详细介绍,本文总结了定义.相同这处.不同之处.浏览器兼容性上的差别等内容,并建议优先选择property,需要的朋友可以参考下     1. 定义 Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className

Javascript中最常用的55个经典技巧

原文:Javascript中最常用的55个经典技巧 1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table oncontextmenu = "return(false)"></table> 可用于Table 2. <body onselectstart="return false"> 取消选取.防止复制 3. onpaste=&quo

关于在JavaScript中使用EL表达式的问题,到底用不用加单引号或者双引号或者不加?

问题描述 关于在JavaScript中使用EL表达式的问题,到底用不用加单引号或者双引号或者不加? 之前我自己编辑百度地图api时候,EL表达式是直接写的,但是并不能使用. 当时我在csdn上找到了如下这篇文章,说是要加引号.http://blog.csdn.net/xuechongyang/article/details/8629473然后就成功了. 比如下代码的最后一句. <script type=""text/javascript""> // 百度

JavaScript中解决多浏览器兼容性23个问题的快速解决方法_javascript技巧

一.document.formName.item("itemName") 问题 问题说明:IE下,可以使用 document.formName.item("itemName") 或 document.formName.elements ["elementName"]:Firefox 下,只能使用document.formName.elements["elementName"]. 解决方法:统一使用document.formNa

javascript中删除页面数据的问题

问题描述 javascript中删除页面数据的问题 在一个HTML程序的的地步引入了两个JS程序,现在我在HTML页面添加了一个删除按钮 <a href=""index.html""><input type=""button"" value=""Remove!"" id=""a"" onclick=""remo

PHP实现Javascript中的escape及unescape函数代码分享

 这篇文章主要介绍了PHP实现Javascript中的escape及unescape函数代码分享,本文给出两个实现版本,需要的朋友可以参考下     这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了.. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

理解JavaScript中的事件

javascript 在很多语言的学习中,"事件"都是一个比较难理解,但是又是一个很重要的概念.JavaScript中的事件处理也是一样,正因为有了事件处理,才会出现Ajax拖动的效果.本文就讨论一下JavaScript中的事件处理,读过之后,您就会知道,很多Ajax框架实现拖动效果的原理了.一. IE Event对象(一)IE Event对象的主要属性和方法 在IE中有一个专门负责事件处理的对象Event,这个对象负责对事件的处理,含有很多的属性和方法,通过这些方法和属性的调用,就能