我有一个包含一些HTML的变量。此HTML不在文档正文中 - 仅在变量中!从这里,我想提取每个li
的内容并将其放入一个数组中,这样我就可以为每个列表项创建新内容。
我可以这样做吗?
var myList = "<ul><li>item 1</li><li>item 2</li><li>item 3</li></ul>";
myList.getElementByTagName('LI') = myLiContents;
感谢您的期待!
答案 0 :(得分:1)
您可以创建一个虚拟元素,并将该元素的innerHTML
设置为您拥有的HTML字符串:
var myList = "<ul><li>item 1</li><li>item 2</li><li>item 3</li></ul>",
dummy = document.createElement('div');
dummy.innerHTML = myList;
console.log(dummy.getElementsByTagName('li'));
但请注意,getElementsByTagName
的结果是不数组,而是nodeList
,一个类似数组的对象。您仍然可以通过nodeList
运行循环来创建一个真正的数组。
答案 1 :(得分:1)
您不能在字符串上使用getElementByTagName
...仅限于插入到文档中的HTML元素。但是对于你想要实现的目标,你并不需要那样做。您可以使用正则表达式从字符串中提取所有<li>
:
var li = myList.match(/<li>.*?<\/li>/gi);
哪个会生成这样的数组:
["<li>item 1</li>", "<li>item 2</li>", "<li>item 3</li>"]
要摆脱额外的<li>
和</li>
,您可以在循环浏览每个项目时执行字符串替换:
li[i].replace(/<\/?li>/gi, "");