我正在编写一个用以下一般结构解析页面的润滑脂脚本:

<table>
<tr><td><center>
<b><a href="show.php?who=IDNumber">(Account Name)</a></b>
 (#IDNumber)
<br> (Rank)
<br> (Title)
<p>
<b>Statistics:</b>
<br>
<table>
<tr><td>blah blah etc.
</td></tr></table></center></table>

我正在专门尝试从中获取(标题)部分。如您所见,它仅由<BR>标记引起,没有自己的ID,仅是<CENTER>标记的文本的一部分,并且该标记具有与之关联的其他所有文本。

现在,我要做的就是获取Center标记的innerHTML并在其上使用正则表达式以匹配/<br>([A-Za-z ]*)<p><b>Statistics/。这对我来说还可以,但是感觉好像有一种更好的方法可以从中选择特定的文本。

...因此,有没有更好的方法?还是我应该向站点程序员抱怨他需要使该文本更易于访问? :-)

最佳答案

编辑:更新以删除空格

var title = $('table center').contents().filter(function() {
         if( this.nodeType == 3 && $.trim(this.data) != "") { //get only text nodes and filter out whitespace elements
           return true;
        }
      }).get(2); // get the 3rd text node


    alert( title.data ); // alerts "(Title)
    title.data = "How to use jQuery"; // (Title) changes

这个怎么运作:

该函数在提供的节点中的所有节点上运行,在本例中为中心标记。文本是nodeType 3,因此您将获得这些数组。您的示例的右中心标记放错了位置,因此可能会给您带来错误,但我认为您已经明白了。 (我认为您在此之前缺少a)

您总是可以:
  $('table center').contents().filter(function() {
       if( this.nodeType == 3 && $.trim(this.data) != "") { //get only text nodes and filter out whitespace elements
           return true;
        }
      }).wrap('<p></p>') // make those text nodes paragraphs
      .end().filter('br')
        .remove(); // remove the brs

看到jquery docs on .contents()

关于javascript - 在JS/JQuery中通过DOM获取BR分隔的文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2907991/

10-09 18:12
查看更多