【问题标题】:Server-side jquery服务器端jquery
【发布时间】:2012-06-30 14:21:21
【问题描述】:

假设我有一个用 perl 或 python 编写的脚本。编写将在字符串上使用 jquery 选择器作为其一部分的函数的最简单方法是什么?即能够做到:

jquery_selector('table.new#element', text)

其中jquery_selector 是一个在text 中存储的html 字符串上运行jquery 选择器的函数。即使它仅限于返回字符串(不是完整的 jquery 对象),它仍然非常有用。即,如果您需要提供一个 javascript 函数作为回调,该回调会将结果呈现为脚本语言中可理解的内容:

jquery_selector('table.new#element, text, 'function(e){return e.val()}')

它会将回调的结果作为列表返回。

我知道大多数语言都有 dom 库,但 jquery 比其中大多数要好得多。

我不是在询问具有类似 jquery 语法的本机库。我猜想运行 jquery 的浏览器需要一个 API 吗?或者这就是 node.js 的作用?

【问题讨论】:

标签: jquery node.js server-side


【解决方案1】:

如果我正确理解您的问题,您想要的是 phantom.js。 PhantomJS 是一个带有 JavaScript API 的无头 WebKit。您可以将 jquery 注入其中并使用所有 jquery 选择器来操作 dom。你也可以让它像一个独立的服务器一样工作。

【讨论】:

  • 知道它们被称为 headless browsers 是成功的一半。还有 Zombie.js 用于 node.js。
  • @Jared Farrish zombie.js 是一个测试框架,但有一个幻象节点模块。github.com/sgentle/phantomjs-node
【解决方案2】:

我很困惑,因为您在问题中引用了 Python 或 Perl,但您已用“node.js”标记了该问题。运行 node.js 和/或 phantom.js 只是为了在 HTML DOM 上运行选择器对我来说听起来很重量级,并且在实际项目中应该仔细考虑引入整个依赖链。

所以对于 Python,我建议运行 BeautifulSoupsoupselect 的组合,如 this answer 中所述。然后,您可以执行以下操作:

from BeautifulSoup import BeautifulSoup as Soup
from soupselect import select
import urllib

soup = Soup(urllib.urlopen('http://slashdot.org/'))
select(soup, 'div.title h3')

请注意,soupselect 似乎只实现了 jquery 的 CSS3 选择器的一个子集,因此对于诸如兄弟选择器或伪类它可能不起作用。在这种情况下,我建议考虑将项目的相关部分移植到 node.js,如果您可以在稍微轻量级的环境中独立运行 Sizzle(jQuery 的选择器引擎)或 cheerio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2012-07-18
    • 2011-01-22
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多