Как я могу уточнить этот код Javascript, чтобы он игнорировал ссылки из изображений
Это вариант существующего вопроса
{Обратите внимание - этот вопрос является противоположным / обратным существующему вопросу Stackru, который слишком сложен, чтобы отвечать на него}
С самого начала
Я хочу внести некоторые изменения в некоторый код из этой задачи:
// 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>
Это ссылка на изображение - я не хочу, чтобы это влияло на это.
2 ответа
В прямом 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]);
}
} );
Но для этого необходимо загрузить jQuery в Greasekit, что того стоит, за исключением самых простых сценариев.
if (links[i].querySelector('img')) {
// Link has an <img>! Oh no!
}
Для поддержки старых браузеров звоните getElementsByTagName()
вместо этого (и проверьте наличие пустого массива).