标签: selectors-api

querySelectorAll - 获取具有属性集的所有标记?

例如,我需要一个包含id属性集的所有标签的列表(它可以是任何其他属性,id只是一个例子).

javascript css-selectors selectors-api

6
推荐指数
1
解决办法
4433
查看次数

使用querySelectorAll时,有没有办法引用上下文节点的直接子节点而不使用ID?

假设我有一个HTML结构

<div id="a">
  <div id="b">
    <div id="c"></div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

要使用querySelectorAll查询"a"的子项,我可以执行类似的操作

//Get "b", but not "c"
document.querySelectorAll('#a > div')
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否可以在没有ID的情况下直接引用节点?我试过了

var a_div = document.getElementById('a')
a_div.querySelectorAll('> div') //<-- error here
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误,告诉我我使用的选择器无效.


如果有人想知道,我真正的用例会更复杂,比如'> .foo .bar .baz'所以我宁愿避免手动DOM遍历.目前我正在为root div添加一个临时id,但这似乎是一个丑陋的黑客......

javascript css-selectors selectors-api

6
推荐指数
2
解决办法
3822
查看次数

使用XPath与CasperJS QuerySelectorAll无法正常工作

出于某种原因,当我尝试运行以下代码时:

var casper = require('casper').create(); 
var x = require('casper').selectXPath;
var links = [];

casper.start('http://www.website.com');

function getLinks() {
    var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a');
    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href')
    });
}

casper.then(function() {
    links = this.evaluate(getLinks);
    this.echo(links);
}

casper.run();
Run Code Online (Sandbox Code Playgroud)

返回一个null对象,但是当我使用与thenClick方法相同的xpath选择器时,一切正常并且url会更改.为什么到底是这样的?

xpath css-selectors web-scraping selectors-api casperjs

6
推荐指数
1
解决办法
8529
查看次数

在PowerShell中的mshtml.HTMLDocumentClass对象上使用querySelectorAll会导致崩溃

我正在尝试通过PowerShell进行一些网络抓取,因为我最近发现它可以毫不费力地这样做.

一个很好的起点是只获取HTML,使用Get-Member,看看我能从那里做些什么,如下:

$html = Invoke-WebRequest "https://www.google.com"
$html.ParsedHtml | Get-Member
Run Code Online (Sandbox Code Playgroud)

我可用于获取特定元素的方法如下所示:

getElementById()
getElementsByName()
getElementsByTagName()
Run Code Online (Sandbox Code Playgroud)

例如,我可以在文档中获取第一个IMG标记,如下所示:

$html.ParsedHtml.getElementsByTagName("img")[0]
Run Code Online (Sandbox Code Playgroud)

然而,在对我是否可以使用CSS Selectors或XPath进行更多研究之后,我发现有未列出的方法可用,因为我们只是使用此处记录的HTML Document对象:

querySelector()
querySelectorAll()
Run Code Online (Sandbox Code Playgroud)

所以不要这样做:

$html.ParsedHtml.getElementsByTagName("img")[0]
Run Code Online (Sandbox Code Playgroud)

我可以:

$html.ParsedHtml.querySelector("img")
Run Code Online (Sandbox Code Playgroud)

所以我期待能够做到:

$html.ParsedHtml.querySelectorAll("img")
Run Code Online (Sandbox Code Playgroud)

...为了获得所有的IMG元素.我发现的所有文档和我已经完成的谷歌搜索都支持这一点.但是,在我的所有测试中,此函数都会使调用进程崩溃,并在事件日志(0xc0000374)中报告堆损坏异常代码.

我在Windows 10 x64上使用PowerShell 5.我在Win10 x64虚拟机中尝试过它,这是一个干净的构建,只是修补了.我也尝试过在Win7 x64上升级到PowerShell 5.我在PowerShell 5之前没有尝试过任何东西,因为我们这里的所有系统都已经升级了,但是我可能会有时间假设一个新的vanilla虚拟机进行测试.

有没有人以前遇到过这个问题?到目前为止,我所有的研究都是死路一条.querySelectorAll有替代品吗?我需要抓取在不可预测的布局中有可预测的标签集的页面,并且可能没有分配给标签的ID或类,所以我希望能够使用允许结构/嵌套/通配符的选择器.

PS我也试过在PowerShell中使用InternetExplorer.Application COM对象,结果是一样的,除了PowerShell崩溃Internet Explorer崩溃.这实际上是我原来的方法,这里是代码:

# create browser object
$ie = New-Object -ComObject InternetExplorer.Application

# make browser visible for debugging, otherwise this isn't necessary for function
$ie.Visible = $true

# browse to page
$ie.Navigate("https://www.google.com")
# wait till browser is not busy
Do { Start-Sleep …
Run Code Online (Sandbox Code Playgroud)

com powershell mshtml selectors-api powershell-5.0

6
推荐指数
1
解决办法
3553
查看次数

javascript addEventListener by querySelector 不起作用

你好,这是我的 JavaScript 代码:

window.onload = function () {

    function hideAds() {
        setTimeout(hide, 2000);
    }

    function hide() {
        var ads = document.querySelector(".ads");
        ads.style.marginTop = (-ads.offsetHeight) + "px";
    }

    function reveal() {
        ads.style.marginTop = "";
        hideAds();
    }
    var ads = document.querySelector(".ads");
    ads.addEventListener("click", reveal, true);


    hideAds();

}
Run Code Online (Sandbox Code Playgroud)

从这段代码来看,除了“ads.addEventListener”倒数第二行之外,一切正常。是什么原因?我在这里做错了什么吗..?

我需要通过单击添加的广告类 div 来调用我的 Reveal 函数。

有人帮助我吗?

javascript debugging addeventlistener selectors-api

5
推荐指数
1
解决办法
7360
查看次数

如何在JavaScript中测试CSS选择器?

我怎么能测试CSS1-3选择器来检查它们是否得到了正确的元素,例如使用JavaScript(也许是jQuery)?

javascript css dom css-selectors selectors-api

5
推荐指数
1
解决办法
1万
查看次数

CSS选择器从右到左进行评估.querySelectorAll()选择器也会被评估吗?

querySelectorAll()选择器是否像CSS一样从右到左进行评估,还是从左到右进行评估?

javascript css css-selectors selectors-api

5
推荐指数
1
解决办法
508
查看次数

IE9相当于querySelectorAll

我在FF或Chrome中没有任何问题,但是IE9在这个方法上丢失了一个错误.我以为我可以使用它,因为它已被证明在这里得到支持:

http://www.quirksmode.org/dom/w3c_core.html

但是,实际情况似乎并非如此.话虽这么说,我可以用它代替什么?

编辑:这是它失败的确切行:

var maximize_buttons = document.querySelectorAll(".maximize");
Run Code Online (Sandbox Code Playgroud)

这是我第一次尝试使用querySelectorAll().浏览器版本号为9.0.8112.16421

编辑(再次):我已在两台独立的计算机上验证了此错误.但是,他们分享了一个共同点 - 他们都在VMware上运行Windows 7.这有关系吗?

浏览器模式是IE9,但默认情况下文档模式设置为怪癖.将其更改为Internet Explorer 9标准解决了问题,但如果怪癖是默认的,我仍然需要让它工作.

javascript internet-explorer selectors-api internet-explorer-9

5
推荐指数
2
解决办法
1万
查看次数

检查来自“ querySelectorAll”的返回值的正确方法是什么?

使用时querySelectorAll,检查它是否返回任何元素的正确方法是什么?

它返回无法检查的内容false。这似乎不起作用:

var elements = document.querySelectorAll('.class');
if (elements) {
  // doesn't work, `elements` is always true
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在通过.length属性进行以下检查:

var elements = document.querySelectorAll('.class');
if (elements.length) {
  // querySelectorAll returned DOM elements
}
Run Code Online (Sandbox Code Playgroud)

这是怎么做的?

javascript dom document selectors-api

5
推荐指数
1
解决办法
1764
查看次数

具有特定子元素的查询选择器

所以基本上我想选择具有特定子元素的元素。现在我有选择器来选择链的子元素:

const el = document.querySelector('#leftMenu ul > li > a:not(.active) + ul > li.active')
Run Code Online (Sandbox Code Playgroud)

现在要获取我感兴趣的元素,我必须这样做:

const x = el.parentNode.parentNode;
Run Code Online (Sandbox Code Playgroud)

有什么方法可以直接从选择器本身获取这个元素吗?

javascript css-selectors selectors-api

5
推荐指数
1
解决办法
3886
查看次数