|
本帖最后由 9622315 于 2015-1-10 12:14 编辑
虽然10年没做JS了,但是我还是一眼就看出来你的代码有问题
运行后,write()方法插入页面的代码如下
- <div id="ad_right" style="width: 300px; height: 200px; right: 1px; bottom: 1px; position: fixed; z-index: 10001;">
- <adocument.getelementbyid('ad_right').style.display='none' style="top: -14px; right: 0px; font-size: 12px; position: absolute;" href="javascript:void(0);">
- 关闭
- <a href="http://www.baidu.com/"><img style="width: 300px; height: 200px;" src="http://a.hiphotos.baidu.com/image/h=360/sign=564166e4d3160924c325a41de406359b/a08b87d6277f9e2fe7b41cba1c30e924b999f3fb.jpg" /></a>
- </adocument.getelementbyid('ad_right').style.display='none'></div>
复制代码
你看看,存在以下问题
1 根本不存在adocument对象,我猜a后面应该有个空格,也就是
- <a document.getelementbyid('ad_right')...后面略
复制代码- </a document.getelementbyid('ad_right')...后面略
复制代码
2 还是上面的问题,如果这样修改的话,对象名称是没错了,但是又出现了新问题,脚本指令插入到了html标记中了,标准规范中,这应该是不被允许的。
另外,从代码中,我也没有看出来
- adocument.getelementbyid('ad_right').style.display='none'
复制代码
用意,这行代码,执行的操作是隐藏你插入的广告,但实际上根本就没有执行代码,因为“adocument”作为不可识别标记,被忽略了
3 如果按照问题1中的修改方法,还会引出另一个问题,就是标记嵌套了,这也是不被允许的,连接中还要定义新的连接,这逻辑上说不通的。
不要随便抄过一些代码,就贴到论坛里,不好的,即便运行能通过,潜在的错误,是无法保证代码的兼容度的,你的浏览器OK,别人的不一定OK。
真真终于换头像了,还是这个好看。
仔细核对了附件中的代码,附件中的没有错误,看来是你发帖时出错了。
今天又发现个新问题,你的样例中存在BUG,具体的讲就是你的样例中,是通过元素ID来引用元素对象,并修改其属性,完成关闭插入广告的功能,但这就潜在的存在一个问题,
即,理论上你不可能命名一个绝不可能重名的对象,换句话说,你给插入广告对象命名“ad_right”,是存在可能与页面内已有元素重名的可能性的,不管你如何修改命名规则,这个可能性都是存在的,只是几率大小不同罢了。
如果出现重名的情况,你样例中的引用方法,默认是对第一个出现此名称的对象的引用,并进行相应操作,如果此对象是页面内原有对象,也就是此对象不是你的插入广告,则你不但不能完成关闭广告的操作,反而会关闭页面内已有元素显示,破坏原有网页排版。即便你的出入广告是以这个名称最先出现元素,不影响你对其进行关闭的修改操作,但会造成,页内原有脚本对此名称对象修改时,修改的不是原有元素对象,而是修改你的插入广告,这也是不可以的,也就是说如果出现与插入广告同ID名称的元素时,不是你的广告脚本运行不正常,就是原有页面相应的脚本运行不正常。
正确的方法是,不给插入广告命名,采用DHTML内建元素对象的引用机制,来完成对元素属性的修改操作,具体修改如下:
将
中的
去掉,即删除掉
将
- document.getElementById(\'ad_right\').style.display
复制代码
修改为
- this.parentNode.style.display
复制代码
原理分析
样例中的代码是通过getElementById()方法,返回第一个命名为“ad_right”的元素,并完成对其进行相应的属性修改操作,
修改后的代码是通过当前的本级元素对象(this)的parentNode属性,间接引用父级元素对象,并对其进行相应的属性修改操作,
this是JavaScript的保留字,表示对当先操作的html元素对象的引用,通过它来完成对父级元素对象的操作,不需要给父级元素对象命名,也就不会出现页面内元素对象重名的现象了。
10年不code了,想不到,俺宝刀不老,又找回当年全公司coder达人的感觉了,意淫自恋一下,哈哈哈哈。
|
|