{请注意 - 此问题与existing StackOverflow question相反/相反,too complex可以回答}
我想对some code from this challenge进行一些改进:
// the new base url
var base = ' https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links = document.getElementsByTagName('a');
for(var i = 0;i < links.length;i++){
// check each link for the 'asin' value
var result = /asin=([\d\w]+)/.exec(links[i].getAttribute('href'));
if(result){
// make a new url using the 'base' and the 'asin' value
links[i].setAttribute('href', base+result[1]);
}
}
现在,反而它在所有链接上运行,是否可以让它只查看来自文本的链接?
这是一个HTML代码段,用于显示我的意思:
<a href="/shop/product?ie=UTF8&asin=Z00FDLN878&tab=UK_Default" target="_blank"><img width="125" height="125" border="0" src="http://ecx.images-amazon.com/images/I/01W9a7gwosL.jpg" alt="43453"></a>
这是一个图像链接 - 我不希望它采取行动。
答案 0 :(得分:1)
if (links[i].querySelector('img')) {
// Link has an <img>! Oh no!
}
要支持旧浏览器,请改为调用getElementsByTagName()
(并检查空数组)。
答案 1 :(得分:1)
在直接javascript / DOM 中,在循环浏览链接时测试链接:
var base = 'https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var linksNoImg = document.querySelectorAll ("a[href*='asin']");
for (var J = linksNoImg.length - 1; J >= 0; --J) {
var imgLink = linksNoImg[J];
//--- Make sure it's not an image link:
if ( ! imgLink.querySelector ('img') ) {
//--- Check each link for the 'asin' value
var result = /asin=([\d\w]+)/.exec (imgLink.getAttribute ('href') );
if (result) {
// make a new url using the 'base' and the 'asin' value
imgLink.setAttribute ('href', base+result[1]);
}
}
}
jQuery 可让您预先选择正确的链接:
//--- The new base URL
var base = ' https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var linksNoImg = $("a[href*='asin']:not(:has(img))");
linksNoImg.each ( function () {
// check each link for the 'asin' value
var result = /asin=([\d\w]+)/.exec(links[i].getAttribute('href'));
if(result){
// make a new url using the 'base' and the 'asin' value
links[i].setAttribute('href', base+result[1]);
}
} );
但是这需要你在Greasekit中加载jQuery - 除了最简单的脚本之外,这是值得的。