【问题标题】:Is this an efficient way to convert HTML to text using jQuery?这是使用 jQuery 将 HTML 转换为文本的有效方法吗?
【发布时间】:2009-12-02 00:55:44
【问题描述】:

我正在尝试将 HTML 转换为纯文本。它有效率吗?我错过了什么吗?

txt = $("body").find("script,noscript,style,:hidden").remove().end().text();

谢谢!

【问题讨论】:

  • 有问题的代码是否给您想要的结果?我认为这是唯一重要的衡量标准。我倾向于使用lynx --dump 之类的工具来获取网页的文本版本 - 但在客户端你的技术似乎很好。
  • 你想做什么 $('body').text() 没有完成?
  • $('body').text() 还返回
  • 不使用remove() 撕裂DOM 怎么样?试试:not 伪选择器:$("*:not(script,noscript,style,:hidden)").text(),如果我理解正确的话,它会完成同样的事情。
  • 这将无法正常工作,因为 text() 以递归方式工作并返回元素及其所有子元素的文本内容。所以像 $("*").text() 这样的东西会多次获得相同的文本内容。您只想使用顶部元素调用 text()。

标签: javascript jquery html text


【解决方案1】:

HTML 文本。

编辑试试这个...

// Get current body text
var html = $("body").text();

// Create a new jQuery object out of body text and remove desired elements
var text = $(html).remove("script,noscript,style,:hidden").text();

【讨论】:

  • 我正在寻找我的 HTML 文档的纯文本版本。
  • 确实,我最终做了类似的事情,因为一旦你删除了元素,基本上就不可能再把它们插回去了。现在,如果我们有一个递归版本的 clone()...
  • 您可以使用 jQuery 扩展来执行这样的深层复制:var html = $.extend(true, {}, $("body").text()); 然后在我的回答中使用相同的 var text 行。试试看,如果它按你的预期工作,我会编辑我的答案。
  • 乔希,你基本上是在复制一个扁平的字符串 ($("body").text())。为什么使用extend(true,...)?我最终创建了一个 jQuery.html2text 函数(基于jQuery.text()),专门用于从 HTML 转换。
  • 我想我误解了你之前的评论:D
【解决方案2】:

你想要element.textContentelement.innerText 用于 IE)。

【讨论】:

    【解决方案3】:
    var scriptContents = $('body').find('script').html();
    var noScriptContents = $('body').find('noscript').html();
    var styleContents = $('body').find('style').html();
    

    【讨论】:

      【解决方案4】:

      如果您只是尝试将其渲染到屏幕上,您可以:

      <pre>
          some html here
      </pre>
      

      【讨论】:

      • 我正在尝试使用客户端脚本将 HTML 转换为纯文本。
      • 当你说普通的 tesxt 时,你的意思是要删除标签吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多