可以在javascript中选择第一个元素而不是整个节点列表

时间:2017-06-19 04:52:18

标签: javascript

我正在尝试console.log每个匹配页面上某个类的元素的内部文本。使用Nightmare.js / Electron,仅选择第一个元素的工作代码是:

.evaluate(function() {
  console.log(document.querySelector('.result__url__domain').innerText)
}) // returns the first matching element's inner text

虽然这有效,但试图抓住它们并不是:

.evaluate(function() {
  console.log(document.querySelectorAll('.result__url__domain').innerText)
}) // this returns undefined

这是针对所有相关元素的错误方法吗?

为清晰起见,这是完整的脚本代码:

var Nightmare_module = require('nightmare')
var nightmare_instance = Nightmare_module({
  show: true // SHOWS the browser
})

var search_term = 'plumber las vegas'

// do a search for the target term

nightmare_instance
  .viewport(1200, 900)
  .goto('https://duckduckgo.com')
  .type('#search_form_input_homepage', search_term)
  .click('#search_button_homepage')
  .wait('.result__a')


  // print domain names to the console

  .evaluate(function() {
    console.log(document.querySelectorAll('.result__url__domain').innerText)
  })

  .then(function (resultObject) {
    console.log(resultObject)
  })
  // .catch(function(errorObject) {
  //   console.error('Search failed. Reason: ', errorObject)
  // })

1 个答案:

答案 0 :(得分:1)

querySelectorAll返回一个dom元素数组,因此你必须遍历每个元素以获取innerTEXT。

.evaluate(function () {
    document.querySelectorAll('.result__url__domain').forEach(function(singleElement){
        console.log(singleElement.innerText);
    });
})