2011-03-08 34 views
0

我觉得这个问题有点新手...单独从一个字符串句子元素的每个字,但也有一些跨度

好,面临着这样的例子:

<h1>A<span>really</span>long<span>sentence</span></h1> 

我需要动态地将每个单词放在一个数组中,但是我需要保持顺序。喜欢的东西:

var words = ['A','really','long','sentence']; 

我最初的想法是让没有涉及所有跨越到一个数组,所有的话到另一个数组,然后合并这两个,但是,我没有看到任何的JavaScript/jQuery的方法正确将没有跨度的单词收集到一个数组中。

我确定我错过了一些东西。有任何想法吗?

谢谢

+0

顺便说一句,你不想命名你的变量数组。 – Jordan 2011-03-08 19:52:46

+1

@Jordan我知道!它只是为了教育目的=)仍然我会编辑,以避免混淆 – Couto 2011-03-08 19:55:48

+0

你永远不知道:) – Jordan 2011-03-08 20:01:30

回答

3

跨度使它变得凌乱;你已经把跨度变成了空间,然后在空间上分开。

var array = $('h1').html().replace(/\<\/*span\>/g,' ').split(' '); 
+0

这是我失踪的基本东西!我知道解决方案很简单,但我不记得了! (如果我现在已经学会了RegEx,我可能会......真的需要!)谢谢! =) – Couto 2011-03-08 19:58:30

+1

我强烈建议[rubular](http://rubular.com)学习正则表达式。我想有一个可用的JS特定版本。 – Jordan 2011-03-08 20:02:25

0
function wordgrab(node){ 
    var A= []; 
    if(node){ 
     node= node.firstChild; 
     while(node!= null){ 
      if(node.nodeType== 3){ 
       if(/[a-zA-Z]/.test(node.data)){ 
        A= A.concat(node.data.split(/\s+/)); 
       } 
      } 
      else A= A.concat(wordgrab(node)); 
      node= node.nextSibling; 
     } 
    } 
    return A; 
} 

wordgrab(document.body的)//使用任何父节点

0

虽然它始终是最好使用纯JS如果可能的话,也尽量可靠地解析HTML一个讨厌的事情。由于jQ已经在这里使用,我坚持使用$ .fn.text():

var a = $('<h1>A <span>really</span> long <span>sentence</span></h1>').text().split(/\W+/); 
+0

没有空格。这就是诀窍。 = \ – Couto 2011-03-08 20:27:49

+0

我想这是一个窍门。但这也意味着您的标记结构很糟糕,IMO。 :) – JAAulde 2011-03-08 20:30:40

+0

可能在你诚实的意见。可能没有面对最终结果的意图。 http://jsfiddle.net/kg7tw/ – Couto 2011-03-08 20:36:03