使用循环

---原作《网猴》 编译《搜狐》
如果你希望对整个文档或文档的某个部分执行某项指令,我们就需要使用万维网联盟的文件对象模块。在此之前你必须对万维网联盟文件对象模块最重要的一个概念“节点”比较了解。

下面的例子可以返回包含网页中所有节点的一列数组:


function WM_getAllPageNodes(){ // this grabs every single node (tag) on the page theDOM = dreamweaver.getDocumentDOM(); WM_nodes = theDOM.childNodes; for (childNodeLoop=0; childNodeLoop<WM_nodes.length; childNodeLoop++) { // this next part does the recursion if (WM_nodes[childNodeLoop].hasChildNodes) { for (grandChildLoop=0; grandChildLoop<WM_nodes[childNodeLoop].childNodes.length; grandChildLoop++) { WM_nodes[WM_nodes.length] = WM_nodes[childNodeLoop].childNodes[grandChildLoop]; } } } return WM_nodes;}
此函数将查找每个节点和子节点,如果它们存在,函数就会把它们添加到节点列表中,而且该函数会不断地重复筛选,直到把网页中所有节点找到为止。然后你就可以查找返回的数组信息,对每个节点进行检查,来查看它们是否与你所查询的置标符类别相匹配。为了做到这一点,你应该利用一些节点属性来了解节点的相关信息,例如tagName(会对〈P〉置标符返回"P",对<img>置标符返回"IMG"信息)、数据(置标符的文本内容)、getAttribute()函数(这可以获得属性值),还有非万维网联盟组织的一些属性如innerHTML和outerHTML(它们会在置标符内返回HTML源代码)。通过使用上述属性和方法,你可以过滤掉所有你不需要的置标符。 另外你还可以随时通过下面的方法重新找回节点数组列表:
var theDOM = dreamweaver.getDocumentDOM('document')var paragraphs = theDOM.getElementsByTagName('paragraphs');

这样你就可以获得一组称"paragraphs"的数组,这里面包括了代表段落置标符的所有节点。通过使用Dreamweaver客户对象,你还可以把上述内容简化表示为: var paragraphs = dreamweaver.getObjectTags('document', 'p');

第二种表达方式的优点在于更加简短,并能够定位特定的文件(如框架中的文件),而第一种表达方式的特点在于它更加精确,可以获得任意置标符,其中包括你自己创建的扩展标识语言置标符。如果这两种方法都不能成功,而你又想获得Dreamweaver库节点列表,你也可以采用我在上文介绍的比较复杂的方法。

如果你查看一下我的指令的最终源代码,会发现当你需要对整个文档执行某项操作时,你可以对所有节点进行循环检索(可以采用我前面介绍的任意适用于你的方式),进行大量的比较(使用"regex"),并使用文本中的"offsets"(补偿值)和outerHTML代码对其进行修改。

好了,以上就是Dreamweaver扩展能力的全面介绍,通过对Dreamweaver的扩展,可以允许你实现更多的功能。那么如果你也制作出非常优秀的脚本,请别忘了给我们网猴的编码库中发送一份,以便让更多的人分享你的劳动成果呀!