Сохранить список массивов в переменной - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь сохранить список массивов в переменной, но понятия не имею, как его решить.

xpath вернет список элементов, и он отлично отображается в консоли.Моя проблема в том, что я понятия не имею, как я могу сохранить его в переменной для последующего использования списка.

Если я попытаюсь использовать "arrayList", он вернет только последний элемент из массива, но в консолион отображает все элементы.

Есть идеи?

var iterator = document.evaluate('xpathgoeshere', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

try {
  var thisNode = iterator.iterateNext();

  while (thisNode) {
    var arrayList = (thisNode.textContent);
    var thisNode = iterator.iterateNext();
    for (var i = 0; i < arrayList.length; i++) {
      console.log(arrayList);
    }
  }
} catch (e) {
  dump('Error: Document tree modified during iteration ' + e);
}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Добавьте ваши узлы в массив.

var iterator = document.evaluate('//div', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

const items = []

try {
  var thisNode = iterator.iterateNext();
  while (thisNode) {
    items.push(thisNode)
    var thisNode = iterator.iterateNext();
  }
} catch (e) {
  dump('Error: Document tree modified during iteration ' + e);
}

console.log(items);
<div>
  <div>Item 1</div>
  <div>Item 2</div>
</div>
0 голосов
/ 03 декабря 2018

сначала вы должны обновить thisNode после цикла, потому что arrayList обращено к thisNode.

Следующая проблема может заключаться в том, что вы устанавливаете iterator.iterateNext(); на новый var thisNode внутри цикла while вместо обновления var thisNode внутри своего блока try.(из-за var перед ним)

Попробуйте это::)

var iterator = document.evaluate('xpathgoeshere', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

try {
  var thisNode = iterator.iterateNext();

  while (thisNode) {
    var arrayList = thisNode.textContent;

    for (var i = 0; i < arrayList.length; i++) {
      console.log(arrayList[i]);
    }    
    thisNode = iterator.iterateNext();
  }
} catch (e) {
  dump('Error: Document tree modified during iteration ' + e);
}

Как упомянул Стивен, thisNode.textContent - это строка.Я не знаю, как выглядит твое жало, но, возможно, тебе сначала нужно split(), или, если это JSONstring, ты должен использовать JSON.parse(), чтобы получить свой массив.


Но, есливаши thisNode.textContext s должны быть элементами вашего массива, попробуйте это:

var iterator = document.evaluate('xpathgoeshere', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

try {
  var thisNode = iterator.iterateNext();
  var arrayList = [];

  while (thisNode) {
    arrayList.push(thisNode.textContent); 
    thisNode = iterator.iterateNext();
  }

  console.log(arrayList);

  for (var i = 0; i < arrayList.length; i++) {
    console.log(arrayList[i]);
  }   
} catch (e) {
  dump('Error: Document tree modified during iteration ' + e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...