Использование getElementsByTagName для поиска всех ссылок в переменной

.equals() сравнивает данные в классе (при условии, что функция реализована). == сравнивает местоположения указателя (расположение объекта в памяти).

== возвращает true, если оба объекта (NOT TALKING OF PRIMITIVES) указывают на экземпляр SAME. .equals() возвращает true, если два объекта содержат одни и те же данные equals() Versus == в Java

Это может вам помочь.

0
задан ZeRoberto 25 February 2019 в 07:21
поделиться

2 ответа

Во-первых, вы не должны использовать RegEx для разбора HTML. Этот ответ объясняет почему.

Во-вторых, вы неправильно используете getElementsByAttribute - он делает именно то, что говорит, и получает элементы по атрибутам . Вы должны просто использовать querySelectorAll для всех элементов с href, а затем map из href с:

var hrefs = document.querySelectorAll("a[href*=http]");
var test = Array.prototype.slice.call(hrefs).map(e => e.href);
console.log(test);
<a href="http://example.com">Example</a>
<a href="http://example1.com">Example 1</a>
<a href="http://example2.com">Example 2</a>
<a href="http://example3.com">Example 3</a>
[ 118]

0
ответ дан Jack Bashford 25 February 2019 в 07:21
поделиться

getElementsByTagName возвращает список узлов, у которого нет метода с именем getElementsByAttribute, но ТОЛЬКО если у вас есть доступ к DOM

Без DOM (например, node.js)

const hrefRe = /href="(.*?)"/g;
const urlRe = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&quote]))/ig;

 
const stringFromDB = `<a href="http://000">000</a>
Something something <a href="http://001">001</a> something`

stringFromDB.match(hrefRe).forEach(
 (href) => console.log(href.match(urlRe)[0] ) 
);

// oldschool: 
// stringFromDB.match(hrefRe).forEach(function(href) {  console.log(href.match(urlRe)[0] )      });

В этом коде я сначала создаю фрагмент кода DOM. Также я ТОЛЬКО получаю якоря, которые имеют href для начала с

[1115 ] ПРИМЕЧАНИЕ. getAttribute, поэтому браузер не пытается интерпретировать URL-адрес. 1123]
const re = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&quote]))/ig;

const stringFromDB = `<a href="http://000">000</a>
<a href="http://001">001</a>`

let doc = document.createElement("div");
doc.innerHTML = stringFromDB

doc.querySelectorAll("a[href]").forEach(
  (x) => console.log(x.getAttribute("href").match(re)[0])
);

Без регулярного выражения

const stringFromDB = `<a href="http://000">000</a>
<a href="http://001">001</a>`

let doc = document.createElement("div");
doc.innerHTML = stringFromDB

doc.querySelectorAll("a[href]").forEach(
 (x) => console.log(x.getAttribute("href")) 
);

0
ответ дан mplungjan 25 February 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: