2009-10-30 24 views
0

使用Prototype,我試圖從DOM中提取一段文本 - 這通常是一個簡單的$().innerHTML作業,但是HTML嵌套略微。Strip <script>使用Prototype的innerHTML標籤

<td class="time-record"> 
    <script type="text/javascript"> 
    //<![CDATA[ 
    document.write('XXX ago'.gsub('XXX', i18n_time_ago_in_words(1229311439000))); 
    //]]> 
    </script> 
    about 11 months ago by <span class="author"><strong>Justin</strong></span> 
</td> 

在這種情況下,innerHTML是要拿起JavaScript的,這將導致所有排序的問題。

什麼是最佳/高效/最快提取about 11 months ago by <span class="author"><strong>Justin</strong></span>沒有JavaScript的方法?

回答

5

使用innerHTML,並運行它通過stripScripts

var html = $$('td.time-record')[0].innerHTML.stripScripts() 

這將是抓住了單細胞的HTML有用。做同樣的,但對所有td.time-record元素一個更普遍的解決辦法是:

$$('td.time-record').pluck('innerHTML').invoke('stripScripts'); 

這將返回到你每一個細胞的HTML的陣列(<script>元素刪除),你可以再.join('')或迭代。

1

我不使用Prototype的stripScriptsstripTags,因爲它們是微不足道的,天真的正則表達式黑客,它們無法正確處理所有可能的標記構造。對於這樣一個簡單的例子,你可能會使用stripScripts,但使用這些函數來安全敏感是一個錯誤。

就我個人而言,我會簡單地從DOM中刪除腳本元素,然後再使用innerHTML。一旦執行了內聯腳本,就沒有理由需要將HTMLScriptElement保留在文檔中。

$$('.time-record script').invoke('remove'); 
+0

非常真實。我認爲這個論點也適用於'extractScripts',它使用相同的正則表達式並試圖用'

  • 简体中文
  • 繁體中文
  • Русский
  • Deutsch
  • Español
  • हिन्दी
  • Italiano
  • 日本語
  • 한국어
  • Polski
  • Türkçe
  • Tiếng Việt
  • Française