关于JavaScript的学习(5)

利用DOM技术动态创建一些辅助信息:

1,将隐藏在属性里的信息检索出来

2,把这些信息动态地创建为一些HTML内容

3,把这些HTML内容插入到文档里

原始内容:
<blockquote cite="http://www.w3.org/DOM/">
   <p>
     A platform and language neutral interface
   </p>
</blockquote> 
blockquote元素包含着一个属性cite, 用来告诉人们blockquote元素的内容来自哪个URL。但浏览器会完全忽略cite属性的存在,虽然信息在那里,但是用户看不到。下面我们利用上面的三部曲,将此属性显示到文档中。

1.检索属性信息:遍历文档里的所有blockquote元素,从blockquote元素里提取cite属性的值:
                var block=document.getElementsByTagName('blockquote')
                for (i=0;i<block.length;i++)
                {
                    if (!block[i].getAttribute('cite')) continue;//如果该节点没有cite属性,将跳出本次循环,进行下一次循环
                    var current_quote=block[i];
                     var url=current_quote.getAttribute('cite'); //获取cite属性的值
                 }

2.将得到的属性动态地创建为HTML内容:上一章讲了如何动态的创建HTML内容,可以采用document.write、innerHTML、createElement等方法创建,这里,我们使用createElement方法创建:
cite作为一个引用的链接地址,那么我们创建链接标签<a>
            var link=document.createElement('a');
            var link_text=document.createTextNode('source');//将链接命名为source
            link.appendChild(link_text);
            link.setAttribute('href',url);//设置herf属性及其value

3.将创建的HTML内容插入到文档中:由于我们创建的这个HTML内容是作为一个引用的网址存在,所以我们希望将其插入到引用文字的后面,如果采用block[i].lastChild,由于</p>和</blockquote>标签之间还存在一个换行符,有些浏览器会把这个换行符解释为一个文本节点,那么,blockquote元素节点的lastChild属性将是一个文本节点,而不是那个p元素节点。而有些DOM方法只能用于元素节点,那么我们就需要把blockquote里的所有元素节点都找出来:
                                    var quoteChildren=block[i].getElementsByTagName('*');

通配符*作为参数传递给getElementsByTagName方法,它会把所有的元素返回给我们,现在quoteChildren数组包含着blockquote元素的所有元素节点,而blockquote元素的最后一个元素节点将对应着quoteChildren数组中的最后一个元素。
数组中最后一个元素的下标=数组长度-1
var elem=quoteChildren[quoteChildren.length-1],现在变量elem对应着blockquote所包含的最后一个元素节点

var superscript=document.createElement('sup');//sup标签里的内容将会以当前文本流中字符高度的一半来显示
superscript.appendChild(link);
elem.appendChild(superscript);

函数整体:

function displayCitations() {
    var block=document.getElementsByTagName('blockquote')
    for (i=0;i<block.length;i++)
    {
        if (!block[i].getAttribute('cite')) continue;//如果该节点没有cite属性,将跳出本次循环,进行下一次循环
        var current_quote=block[i];
        var url=current_quote.getAttribute('cite'); //获取cite属性的值
        var quoteChildren=block[i].getElementsByTagName('*');
      
        if (quoteChildren.length<1) continue;
        var elem=quoteChildren[quoteChildren.length-1]//数组中的最后一个元素的下标=数组的长度-1
        var link=document.createElement('a');
        var link_text=document.createTextNode('source');//将链接命名为source
        link.appendChild(link_text);
        link.setAttribute('href',url);//设置herf属性及其value
        var superscript=document.createElement('sup');//sup标签里的内容将会以当前文本流中字符高度的一半来显示
        superscript.appendChild(link);
        elem.appendChild(superscript);


    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值