假设我有一个带url的数组(显示href
属性)(不要问我为什么,就像那样):
var MyArray = [
'<a href="http://www.facebook.com/"></a>',
'<a href="http://www.twitter.com/"></a>',
'<a href="http://www.cnn.com/"></a>'
];
我想创建一个新的数组,使用相同的网址,但没有锚标记<a href=""></a>
,所以像这样:
var MyNewArray = [
"http://www.facebook.com/”,
"http://www.twitter.com/",
"http://www.cnn.com/"
];
这里需要一些HTML魔术...... 谢谢你们!
答案 0 :(得分:1)
一个选项是将元素附加到临时DOM容器元素,然后使用本机DOM API方法/属性来检索所需的属性。
在下面的示例中,您可以将元素数组传递给将创建临时div
容器元素的函数。然后将容器的innerHTML
property设置为锚元素的连接列表。从那里,您可以访问本机href
属性并返回所有值的映射数组。
这种方法的好处是,即使锚元素字符串具有不同顺序的多个不同属性,它也能工作。如果在href
值周围使用单引号而不是双引号,它也会有效。
function getAnchorHrefAttributes(elementsArray) {
var container = document.createElement('div');
container.innerHTML = elementsArray.join(' ');
return Array.from(container.querySelectorAll('a')).map((a) => a.href);
}
var anchors = ['<a href="http://www.facebook.com/" class="test">1</a>',
'<a href="http://www.twitter.com/"></a>',
'<a href="http://www.cnn.com/"></a>'
];
function getAnchorHrefAttributes(elementsArray) {
var container = document.createElement('div');
container.innerHTML = elementsArray.join(' ');
return Array.from(container.querySelectorAll('a')).map((a) => a.href);
}
var hrefs = getAnchorHrefAttributes(anchors, 'href');
console.log(hrefs);
或者,您也可以使用基本正则表达式(例如/href="([^"]+)"/
)来捕获href
属性值。但是,出于上述原因,我强烈建议避免正则表达式,以支持上述解决方案。
function getAnchorHrefAttributes(elementsArray) {
return elementsArray.map((a) => {
var match = a.match(/href="([^"]+)"/);
return match ? match[1]: null;
});
}
var anchors = ['<a href="http://www.facebook.com/" class="test">1</a>',
'<a href="http://www.twitter.com/"></a>',
'<a href="http://www.cnn.com/"></a>'
];
function getAnchorHrefAttributes(elementsArray) {
return elementsArray.map((a) => {
var match = a.match(/href="([^"]+)"/);
return match ? match[1] : null;
});
}
var hrefs = getAnchorHrefAttributes(anchors, 'href');
console.log(hrefs);
答案 1 :(得分:1)
你可以循环遍历数组中的每个元素,并使用replace函数将标记替换为空字符串
var myString = '<a href="http://www.facebook.com/"></a>';
myString = myString.replace('<a href="' , '');
myString = myString.replace('"></a>' , '');
console.log(myString)
答案 2 :(得分:0)
首先声明你的新数组。
var MyNewArray = [];
然后使用一个简单的for循环来分割每个数组元素,并将所需的URL插入到新数组中。
for (var i = 0 ; i < MyArray.length ; i++) MyNewArray[i] = MyArray[i].split('"')[1];
就是这样。
这是如何运作的?
您的数组元素<a href="http://www.facebook.com/"></a>
将分为三个部分。
MyArray[i].split('"')[0] = '<a href='
MyArray[i].split('"')[1] = 'http://www.facebook.com/'
MyArray[i].split('"')[2] = '></a>'
因此,在每次迭代中,第二部分,即MyArray[i].split('"')[1]
都是您需要的网址。
答案 3 :(得分:0)
Element#insertAdjacentHTML
将HTML插入占位符。Array#map
根据每个链接的href
属性构建一系列网址。
var a = ['<a href="http://www.facebook.com/"></a>','<a href="http://www.twitter.com/"></a>','<a href="http://www.cnn.com/"></a>'];
const getURLarray = (a, c = document.createElement('div')) =>
(c.insertAdjacentHTML("beforeend", a.join('')), [...c.children].map(e => e.href));
console.log(getURLarray(a));
Array#map
从原始数组构建数组
var a = ['<a href="http://www.facebook.com/"></a>','<a href="http://www.twitter.com/"></a>','<a href="http://www.cnn.com/"></a>'];
const URLs = a.map(e => e.split('"')[1]);
console.log(URLs);
答案 4 :(得分:-1)
循环每个数组,然后用空字符串替换<a href="
和"></a>
。
var MyArray = ['<a href="http://www.facebook.com/"></a>',
'<a href="http://www.twitter.com/"></a>',
'<a href="http://www.cnn.com/"></a>'
];
for (var i = 0; i < MyArray.length; ++i) {
MyArray[i] = MyArray[i].replace("<a href=\"", '');
MyArray[i] = MyArray[i].replace("\"></a>", '');
}
console.log(MyArray);