JavaScript中的等价物是什么?

时间:2016-03-17 16:48:19

标签: javascript jquery node.js

var stuff = $($(r).find(".BuyPriceBox")).find(".PurchaseButton").data();

r是来自AJAX调用的响应 r是网页响应。

我想在JavaScript中编写上面的代码,而不是使用任何jQuery,因为node.js不允许我这样做。

我尝试了document.getElementsByClassName("BuyPriceBox"),但我不知道如何做.find等效并获取数据。

修改,更新

这是我试过的

var parser = new DOMParser(); 
var doc = parser.parseFromString(r, "text/html");    
console.log(JSON.stringify(query(doc, ".BuyPriceBox .PurchaseButton").dataset))

这是对的吗?因为我刚收到错误:'TypeError: Cannot read property 'toLowerCase' of undefined'

这就是我在顶部所拥有的。

var request = require("request"); 
var DOMParser = require("xmldom").DOMParser; var query = require("queryselector"); 

我也是这样得到的请求。

request({ url: "roblox.com/A-Lucky-Presence-item?id=380201576";, method: 'GET' }, function(err, res, r) {

另外,我如何安装模块?

2 个答案:

答案 0 :(得分:4)

$($(r).find(".BuyPriceBox")).find(".PurchaseButton").data();

应该大致翻译为

r.querySelector(".BuyPriceBox .PurchaseButton").dataset

其中r的类型为object(节点)。

答案 1 :(得分:0)

假设变量r是HTML字符串或HTML元素,您必须遵循以下功能:

function parseHTML(htmlString) {

    if (htmlString instanceof HTMLElement) {
        return htmlString;
    }

    var el = document.createElement('html');
    el.innerHTML = htmlString;
    return el;
}
function toArray(htmlCollection) {
    return [].slice.call(htmlCollection);
}

function findIn(className, parent) {

    var elements = toArray(document.getElementsByClassName(className));

    return elements.filter(function (element) {
        isDescendantOf(element, parent);
    });
}

function isDescendantOf(element, parent) {
    while (element = element.parentElement) { 
        if (element === parent) {
            return true;
        }
    }

    return false;
}

您可以将代码重写为:

var data = [];

findIn('.BuyPriceBox', r).forEach(function (element) {

    data.concat(findIn('.PurchaseButton', element).map(function (element) {
        return element.dataset;
    }));
});