在元素之前获取文本

时间:2012-11-14 09:58:06

标签: javascript jquery

如何使用Javascript / jQuery获取特定元素之前的正文文本? 我想要实现的是找出身体元素方面的位置,例如,如果正文文本长度为100个字符且节点之前的文本为50,则该节点将为50%。 获得正文的长度很容易,但是在元素之前获取文本并不像我在初学时想到的那样简单。

编辑:

为了说清楚,我举一个例子:

<body>
   <p>
      ...some text <span>that could have sub-elements</span>
   </p>
   <p>
      ...some text
      <ul>
         <li>now with a list</li>
         <li>why not?</li>
      </ul>
   </p>
   <div>
      <p>...some text...</p>
      <div>
          <p>...some text...</p>
          <p id="this_is_the_element">what's there in the body before this element?</p>
          <p>...some text...</p>
          <p>...some text...</p>
      </div
   </div>
</body>

在这种情况下,特定节点将是#this_is_the_element,我期望得到的是:

...some text that could have sub-elements 
...some text 
now with a list 
why not? 
...some text 
...some text

1 个答案:

答案 0 :(得分:5)

我可以提出这个功能:

​function textUntil($element) {
    var T = '#~~~#';
    var $marquer = $('<span>'+T+'</span>');
    $marquer.insertBefore($element);
    var text = $(document.body).text().split(T)[0];
    $marquer.remove();
    return text;
}

诀窍是插入一个唯一的标记并获取文本直到此标记。当然,在呈现HTML之前会删除inserted元素。它适用于任何身体。

Demonstration (open the console)

编辑:

Demonstration with the HTML of your edit (open the console)