Reputation: 2326
Let's say that I have a string as so (not HTML-- from backend, I am recieving as string. I just formatted this way to be easier to read the dom tree):
<ul>
<li>
<a href="link1">Link1</a>
<a href="link2>Link2</a>
</li>
<li>
<a href="link3">Link3</a>
<a href="link4>Link4</a>
</li>
</ul>
How can I get grab inside li
tags and retrieve as so :
[
[<a href="link1">Link1</a>, <a href="link2>Link2</a>],
[<a href="link3">Link3</a>, <a href="link4>Link4</a>]
]
I am assuming you need regex to achieve this (no jQuery).
Upvotes: 2
Views: 524
Reputation: 1369
Try below code :-
var list = document.getElementById("list");
var li = list.querySelectorAll("li");
//console.log(li);
var result = [];
for(var i = 0; i < li.length; i++){
var temp = [];
var anchors = li[i].querySelectorAll("a");
for(var j = 0; j < anchors.length; j++){
temp.push(anchors[j].outerHTML);
}
result.push(temp);
}
console.log(result);
<ul id="list">
<li>
<a href="link1">Link1</a>
<a href="link2">Link2</a>
</li>
<li>
<a href="link3">Link3</a>
<a href="link4">Link4</a>
</li>
</ul>
Upvotes: -2
Reputation: 178059
Wrap the string in a div and access the links using DOM methods. It is NOT recommended to parse HTML with RegEx
var html = `<ul>
<li>
<a href="link1">Link1</a>
<a href="link2">Link2</a>
</li>
<li>
<a href="link3">Link3</a>
<a href="link4">Link4</a>
</li>
</ul>`;
var div = document.createElement('div');
div.innerHTML=html;
// version 1 - just get all links in the string/div
var linksCollection = div.querySelectorAll("a"); // will have some more stuff in it
// version 2 loop each LI and then each A
var lis = div.querySelectorAll("li"),liArr = [];
for (var i = 0; i < lis.length; i++) { // querySelectorAll is array-like
var links = lis[i].querySelectorAll("a"), hrefArr=[];
for (var j = 0; j < links.length; j++) {
hrefArr.push(links[i].outerHTML);
}
liArr.push(hrefArr);
}
console.log(linksCollection)
console.log(liArr)
Upvotes: 3