获取元素的文本

记得John Resig说过,类库就是用来屏蔽浏览器的差异,但他的getText函数就明显做不到这一点,怎么没人去提醒他一下呢?我的英文特烂,阅读还可以,但要我正经八儿地写几句英文,估计句句都是病句……不说了,看下面测试(如果在IE下报错,请刷新当前页面):

IE下明显少了空行与空白,因为IE会自动删除空白节点。所以,要让所有浏览器保持一下,就只有去掉空白节点了。还有,我不明白jQuery会把所有匹配元素的文本串成一个,为何不返回一个字符串数组呢,省得到时我们还要一个个分解……

下面是我的方案:


      //@author:司徒正美(zhongqincheng)
      //获取某个节点的文本,如果此节点为元素节点,则取其childNodes的所有文本,
      //为了让结果在所有浏览器下一致,忽略所有空白节点,因此它非元素的innerText或textContent
      var getText = function(nodes){
        var result = "",node;
        for(var i=0,n=nodes.length;i<n;i++){
          node = nodes[i];
          //如果是文本节点或者CDATA节点
          if ( node.nodeType === 3 || node.nodeType === 4 ) {
            if(!/^/s+$/.test(node.nodeValue))//忽略空白节点与换行符
              result += node.nodeValue;
            //如果是元素节点
          } else if ( node.nodeType === 1 ) {
            result += getText( node.childNodes );
          }
        }
        return result;
      }

看一下效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值