10

我正在处理一些需要解析大量包含 HTML 片段的文件的代码。jQuery 似乎对此非常有用,但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的东西中时,由于 jQuery 对窗口对象的许多引用,它会引发错误。

在没有浏览器运行的代码中使用 jQuery 有什么实用的方法?

更新:作为对评论的回应,我已经成功编写了 JavaScript 代码来使用new ActiveXObject('Scripting.FileSystemObject');. 我知道 ActiveX 是邪恶的,但这只是一个内部项目,用于从一些包含 HTML 片段的文件中获取一些数据并进入适当的数据库。

另一个更新:到目前为止,我的代码看起来像这样:

var fileIo, here;

fileIo = new ActiveXObject('Scripting.FileSystemObject');
here = unescape(fileIo.GetParentFolderName(WScript.ScriptFullName) + "\\");

(function() {
    var files, thisFile, thisFileName, thisFileText;

    for (files = new Enumerator(fileIo.GetFolder(here).files); !files.atEnd(); files.moveNext()) {
        thisFileName = files.item().Name;
        thisFile = fileIo.OpenTextFile(here + thisFileName);
        thisFileText = thisFile.ReadAll();        

        // I want to do something like this:
        s = $(thisFileText).find('input#txtFoo').val();    
    }

})();

更新:我也在 jQuery 论坛上发布了这个问题:http: //forum.jquery.com/topic/how-to-use-jquery-without-a-browser#14737000003719577

4

2 回答 2

3

按照您的代码,您可以使用 Windows Script Host 创建一个 IE 实例,将您的 html 文件加载到该实例中,将 jQuery 动态附加到加载的页面,然后从中编写脚本。

这适用于带有 XP 的 IE8,但我知道 Windows 7/IE9 中存在一些安全问题。如果您遇到问题,您可以尝试降低您的安全设置

var fileIo, here, ie;

fileIo = new ActiveXObject('Scripting.FileSystemObject');
here = unescape(fileIo.GetParentFolderName(WScript.ScriptFullName) + "\\");
ie = new ActiveXObject("InternetExplorer.Application");
ie.visible = true

function loadDoc(src) {
  var head, script;
  ie.Navigate(src);
  while(ie.busy){
    WScript.sleep(100);
  }
  head =  ie.document.getElementsByTagName("head")[0];    
  script = ie.document.createElement('script');
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";
  head.appendChild(script);
  return ie.document.parentWindow;
}

(function() {
    var files, thisFile, win; 
    for (files = new Enumerator(fileIo.GetFolder(here).files); !files.atEnd(); files.moveNext()) {
        thisFile = files.item();         
        if(fileIo.GetExtensionName(thisFile)=="htm") {
          win = loadDoc(thisFile);
          // your jQuery reference = win.$
          WScript.echo(thisFile + ": " + win.$('input#txtFoo').val());
        }  
    }
})();
于 2012-12-05T18:57:46.443 回答
0

这在 Node.js 中使用cheerio 包很容易做到。您可以从任何您想要的来源读取任意 HTML,用cheerio 解析它,然后使用 jQuery 样式选择器访问解析的元素。

于 2015-09-15T00:41:56.937 回答