杂碎笔记:DOM中的Text节点

DOM中的Text节点,has no properties错误

考虑下面一段代码:

<script type="text/javascript">
function switch_nextSibling_display(hdl){
   hdl=hdl.nextSibling;
   if(hdl.style.display=="none") hdl.style.display="block";
   else hdl.style.display="none";
}
</script>
<input type="button" value="Click Me!" onclick="switch_nextSibling_display(this)"/>
<input type="button" value="Hidding Me!"/>

能得到我们想要的结果吗?否!如果用firebug调试的话(有了firebug太爽了哈~),会得到“……has no properties”的提示。这是因为:两个 input 控件之间有个换行符。在DOM树中,包括换行符、空格及其他普通字符都属于Text节点。不能因为换行符和空格看不见就当它不存在,实际上,前 input 节点的 nextSibling 正是这个Text节点,应该nextSibling.nextSibling才对。不过,在IE中,这个Text节点是被忽略的。为了兼容,有两个方法,一就是不要换行;或者,加上这么一句:if(hdl.nodeType==3) hdl=hdl.nextSibling,nodeType等于3表示Text节点。

P的问题~
同样是上面的script,下面的click能预期执行吗?

<input type="button" value="Click Me!" onclick="switch_nextSibling_display(this)"/><p>I want to hide<p>all this!</p></p>

同样不能,"all this"是不受影响的。虽然看起来,后一个p只是前一个p的子节点,好像前面的p包括整句话才能称的上是input的“兄弟”。但实际上,p是不能自包含的,当后一个p出现的时候,前一个p就被关闭了,所以那句话等价于:<p>I want to hide</p><p>all this!</p>。同理,p也不能包含div等块级元素。虽然手工不大可能写出这样的语句,但一些半自动的场合难免,这时用JS读/写DOM树可能会碰到一些意想不到的问题。

var与非var
JavaScript中,在函数外用不用var定义的变量都是全局的,在函数内部,var定义局部变量,不用var定义全局变量,这似乎没什么问题。但下面一段代码会alert出什么呢?

<script type="text/javascript">
var a=1;
function f(){
alert(a);
var a=2;
}
f();
</script>

1吗?No。因为f()里面声明了与全局变量同名的局部变量,代码在运行前先处理变量声明,所以此a已非彼a了,但是alert的时候a还没有被赋值,所以结果是undefined。倘若把f()里面的声明:var a=2 改成赋值:a=2,此a就仍然是彼a,此时因为a的值尚未被改变,所以结果是1。另,全局的JS变量还能被VBScript访问。

一封惊慌失措的来信

刚刚从 GMail 的 Spam 里救回一封信,看完后大为欣慰——这么好玩的信幸好没错过!

以下为原文:

Click the expand button to read full text...

From:西部数码 <info@west263.com>
Date:Aug 31, 2007 1:12 PM
Subject:依法打击网络淫秽色情专项活动的通知

尊敬的用户:
您好!
因近期国家加强了打击非法信息的力度。8月23日,河南电信关闭紫田机房,400余台服务器中断6天以上,被逼转移到杭州机房。
8月28日汕头机房中断了厦门蓝芒科技约1000台服务器,上万个网站受到影响。8月30日,汕头电信中断中客科技600多台服务器。

"电信人员跟笔者提醒:现在政治风头强劲,千万别违规,劝各服务商好好维护自己的机器,特殊的时间要做好特殊的防护,该暂停的就暂停。据蓝芒客服解释:汕头电信机房部分服务器出现了大量BBS站点及违规贴,之前已经停掉约40台服务器,但不知道何故,下午28日17时突然通知强行断掉汕头电信所有机房的服务器(约上万台)的网络连接。"

为了防止类似事件的发生,我司从即日起至10月底开展“依法打击网络淫秽色情专项活动”。

第一方面:站长自查

请广大用户看到此通知后立即对自己的所有网站进行全面清查,并主动关停以下类型的网站:
1、没有经过论坛备案的论坛及其它电子公告板网站,包括论坛、留言板、文章评论等。
2、虽有论坛备案但无法做到全天候监管的论坛。
3、废弃的或者长时间没有进行管理的网站,如因特殊原因不能关停,则需在对网站内容检查确认没有不良信息后将网站置于只读状态。
4、网站内容没有经过站长人工筛选的小说和图片网站,这包括但不限于使用采集工具添加内容的网站。

第二方面:我司采取的措施

针对虚拟主机,每天上午10点执行非法关键词过滤程序,对前一天出现非法关键词的网站进行相关的目录锁定和文件锁定。主要是处理那些长期没有人管理的Blog和论坛,防止自动群发机发送大量非法信息。对内容不健康,打擦边球的网站进行人工排查,责令期限期整改,严重的彻底关闭。

VPS、主机租用、主机托管的用户,请安装我司提供的过滤和监控程序,在专项活动期间接受我司的监督管理。如拒绝安装的将被断网。另外请自觉清理您服务器上的所有网站,发现非法信息的立即关闭。对于没有人管理的论坛,请设置为用户发的贴子必须审核后才能显示。
安装程序我司将通过邮件发送给您,如果没有收到请联系我司客服专员。如果您的服务器没有提供网站服务,则可以不用安装。

第三方面:近期被公安部分通报的出现非法信息的网站的处理

近期被公安部分通报的非法网站不限于按以往的删除非法信息就了事的处理方案。即日起至10月底,被通报的出现非法信息的虚拟主机网站和独立服务器,第一次给予关闭24小时的处理,网站站长需要全面整改自己的网站,并给我司出具书面的整改措施后才能开通。 第二次出现的给予永久关闭并不退款。

由于近期17大召开,所以公安部对服务器的用途规定很严格,绝对不能有未备案或违法信息的网站,论坛/留言板/博客等交互性很强的程序如果能关闭最好关闭,如果不能关闭请加强管理、或者关闭注册,或在虚拟主机控制面板>ip限制中对BBS等目录设置为“禁止任何人访问”。等到17大召开完毕再重新开放。

此次活动旨在维护广大合法用户的权益,大家应给予足够的重视,果断关停自己无法完全监管的信息发布接口,不要有侥幸心理,这是对大家负责,也是对自己负责。近期的严打行动可能给您带来一些不便,敬请您谅解和支持!


相关链接:

深度:毁灭上万网站,紫田网络灾难全纪录 http://home.donews.com/donews/article/1/118092.html

汕头电信单方面中断约1000台服务器网络连接 http://www.admin5.com/article/20070829/54014.shtml

严查40部网络淫秽的色情小说以及违禁网站 http://www.admin5.com/article/20070829/54014.shtml

我司目前过滤的非法关键词及非法信息处理流程 http://www.west263.com/faq/list.asp?unid=299

中客科技被汕头电信封掉六百来台服务器 http://home.donews.com/donews/article/1/118280.html


西部数码

2007-8-31



Update:或不言,或论天象,切不可轻犯天威……