Принудительное открытие ссылок, загруженных с помощью Ajax, в новой вкладке

Я использую этот скрипт, чтобы заставить ссылки открываться в новом окне с помощью Jquery, и он отлично работает

// add external links
function addExternalLinks () { 

$("a[href*='http://']:not([href*='"+location.hostname.replace
       ("www.","")+"']), a.linkException").each(function() {
   if($(this).find('img ').length == 0) {
$(this).click(function(event) {
         event.preventDefault();
         event.stopPropagation();
         window.open(this.href, '_blank');
        }).addClass('externalLink').attr("title", $(this).attr("title")+" - ( This link will open in a new window )");   

        }
   });
}

ОДНАКО, часть страницы использует контент, загруженный с внешней HTML-страницы, используя LOAD.

function showInfo( info ) {
$("#layerinfo").load("descriptions.html #" + info );
};

Я хочу, чтобы ссылки, содержащиеся в этом загруженном контенте, также были принудительно открыты в новой вдове с тем же сценарием. Я не могу заставить его работать должным образом.

Что-то вроде:-

function showInfo( info ) {
var infoContent = "descriptions.html #" + info;

$("#layerinfo").load(infoContent,function(){
$("#layerinfo").html().addExternalLinks();
}); 
};

Любая помощь с благодарностью.

2 ответа

Решение

addExternalLinks это просто функция, а не метод String (что .html возвращается), и при этом это не метод jQuery, который будет связан.

$("#layerinfo").load(infoContent, function () {
    addExternalLinks();
});

Кстати, для addExternalLinks не могли бы вы просто добавить .attr("target", "_blank") на указанные ссылки вместо использования события клика?

try to add attr instead:

$(this).attr("target", "_blank");

надеюсь, это поможет!

Другие вопросы по тегам