Вы должны изменить атрибут href
, используя attr
, а не append
новые дочерние элементы:
$('a[href^="http://"]').filter(function() { // no @ before the attribute name
return this.hostname && this.hostname !== location.hostname;
}).attr('href', function(i, value) {
// takes care of URLs with parameters
return value + (value.indexOf('?') > 0 ? '&' : '?') + 'iframe';
});
Обратите внимание, что hostname
доступно только в HTML5 . Поэтому в браузерах, не поддерживающих HTML 5, фильтр отбрасывает каждый элемент ( Обновление: учитывая, что вопрос, на который вы ссылались, относится к 2009 году, кажется, что браузеры реализовали hostname
, но он не был частью какой-либо спецификации ) , Вы можете изменить его на:
var hostname = new RegExp("^http://" + location.hostname);
$('a[href^="http://"]').filter(function() {
return !hostname.test(this.href);
}).attr('href', function(i, value) {
return value + (value.indexOf('?') > 0 ? '&' : '?') + 'iframe';
});
И если вы также хотите конвертировать ссылки на https
веб-сайты, отмените выбор атрибута и измените регулярное выражение:
var hostname = new RegExp("^https?://" + location.hostname);
$('a').filter(function() {...
Обновление:
Специально для fancybox, согласно документации , он должен работать таким образом. Однако вы правы, вы можете просто добавить класс iframe
:
$('a').filter(function() {...}).addClass('iframe');