我如何改进此Javascript代码以使其仅适用于来自图像的链接(而不是来自文本的链接)

我如何改进此Javascript代码以使其仅适用于来自图像的链接(而不是来自文本的链接),javascript,greasemonkey,getelementsbytagname,greasekit,fluid-mac-app-engine,Javascript,Greasemonkey,Getelementsbytagname,Greasekit,Fluid Mac App Engine,我想对以下方面做一些改进: //新的基本url var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin='; var links=document.getElementsByTagName('a'); 对于(var i=0;i

我想对以下方面做一些改进:

//新的基本url
var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links=document.getElementsByTagName('a');
对于(var i=0;i
现在,我可以让它只查看来自图像的链接吗

下面是一个HTML代码片段来说明我的意思:

<a href="/shop/product?ie=UTF8&amp;asin=Z00FDLN878&amp;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>

这是一个图像链接-我真的希望它在这方面发挥作用

不可能的 我的直觉是,这在代码中实际上是不可能的,因为
document.getElementsByTagName('a')
看不到文本链接和图像链接之间的区别。

//新的基本url
// the new base url
var base = ' https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links  = document.getElementsByTagName('img');
var hrefs = links.parent;

for(var i = 0;i < hrefs.length;i++){
    // check each link for the 'asin' value
    var result = /asin=([\d\w]+)/.exec(hrefs[i].getAttribute('href'));
    if(result){
        // make a new url using the 'base' and the 'asin' value
        hrefs[i].setAttribute('href', base+result[1]);
    }
}
var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin='; var links=document.getElementsByTagName('img'); var hrefs=links.parent; 对于(变量i=0;i
//新的基本url
var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links=document.getElementsByTagName('img');
var hrefs=links.parent;
对于(变量i=0;i
您可以使用正则表达式检查链接HTML中的链接:

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'));

    // check each link for an img tag
    var hasimage = /<img [^>]+>/.test(links[i].innerHTML);

    if(result && hasimage){
        // make a new url using the 'base' and the 'asin' value
        links[i].setAttribute('href', base+result[1]);
    }

}
for(var i=0;i/.test(链接[i].innerHTML);
if(结果和图像(&H){
//使用“base”和“asin”值创建新url
链接[i].setAttribute('href',base+result[1]);
}
}

此外,使用正则表达式搜索HTML可能不是最好的选择,但是如果您控制生成的内容,那么这可能是没有第三方HTML解析器的最快方法。

您可以使用正则表达式检查链接HTML中的链接:

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'));

    // check each link for an img tag
    var hasimage = /<img [^>]+>/.test(links[i].innerHTML);

    if(result && hasimage){
        // make a new url using the 'base' and the 'asin' value
        links[i].setAttribute('href', base+result[1]);
    }

}
for(var i=0;i/.test(链接[i].innerHTML);
if(结果和图像(&H){
//使用“base”和“asin”值创建新url
链接[i].setAttribute('href',base+result[1]);
}
}

此外,使用正则表达式搜索HTML可能不是最好的选择,但是如果您控制生成的内容,那么这可能是没有第三方HTML解析器的最快方法。

您可以根据链接是否包含图像来过滤链接

var links  = document.getElementsByTagName('a');

links = [].filter.call(links, function(item) {
   // test to see if child node is an image
   return item.childNodes[0].nodeName === 'IMG'; 
});

for(var i = 0;i < links.length;i++){
    // do what you gotta do
}
var links=document.getElementsByTagName('a');
links=[].filter.call(链接、函数(项){
//测试以查看子节点是否为图像
返回项.childNodes[0].节点名=='IMG';
});
对于(var i=0;i
您可以根据链接是否包含图像来过滤链接

var links  = document.getElementsByTagName('a');

links = [].filter.call(links, function(item) {
   // test to see if child node is an image
   return item.childNodes[0].nodeName === 'IMG'; 
});

for(var i = 0;i < links.length;i++){
    // do what you gotta do
}
var links=document.getElementsByTagName('a');
links=[].filter.call(链接、函数(项){
//测试以查看子节点是否为图像
返回项.childNodes[0].节点名=='IMG';
});
对于(var i=0;i
存在一个链接,您只需检查链接是否有图像子节点:

var link, links = document.links;
var re = /asin=([\d\w]+)/;
for (var i=0, iLen=links.length; i<iLen; i++) {
  link = links[i]

  if (link.getElementsByTagName('img').length && re.test(link.href)) {
    link.href = base + result[1];
  }
}
var-link,links=document.links;
变量re=/asin=([\d\w]+)/;
对于(var i=0,iLen=links.length;i有一个,您可以只检查链接是否有图像子节点:

var link, links = document.links;
var re = /asin=([\d\w]+)/;
for (var i=0, iLen=links.length; i<iLen; i++) {
  link = links[i]

  if (link.getElementsByTagName('img').length && re.test(link.href)) {
    link.href = base + result[1];
  }
}
var-link,links=document.links;
变量re=/asin=([\d\w]+)/;

对于(var i=0,iLen=links.length;i我最初的反应是查看查询全选,然后分配一个类名来抓取所有标记,这些标记将受到您尝试执行的任何操作的影响。当我到达笔记本电脑时,我将用一个示例编辑它。

我最初的反应是查看查询全选,然后分配一个类要获取所有标签的名称,这些标签将受到您尝试执行的任何操作的影响。当我进入笔记本电脑时,我将用一个示例编辑此标签。

您可以只测试IMG儿童,并且仅在有链接的情况下处理链接

//新的基本url
var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links=document.getElementsByTagName('a');
对于(var i=0;i
您只需测试IMG子项,并仅在有链接的情况下处理链接

//新的基本url
var base=https://www.example.co.uk/gp/wine/order?ie=UTF8&asin=';
var links=document.getElementsByTagName('a')