2013-06-13 4 views
5

Я хочу перейти к div внутри iframe, используя jQuery.animate по ссылке за пределами iframe. Это код я использую:Как применить «смещение» к элементу внутри iframe?

function scrollToAnchorIframe(aid){ 
    var aTag = window.frames['myFrame'].document.getElementById(aid); 
    $('html,body').animate({scrollTop: aTag.offset().top - 62},'slow'); 
} 

Однако, это не работает, протоколирование ошибку «Object [object HTMLElement] has no method 'offset'». Есть ли способ получить смещение id, чтобы заставить его работать?

Update (Раскрыты): Вот код, я использую в настоящее время:

function scrollToAnchorIframe(aid){ 
    var aTag = window.frames['myFrame'].document.getElementById(aid); 
    jQuery('html,body').animate({scrollTop: $(aTag).offset().top + $("#myFrame").offset().top - 62},'slow'); 
} 
+5

Вы получаете эту ошибку, потому что объект не является объектом jQuery. Это HTMLElement. Попробуйте '$ (aTag) .offset()' или оберните 'window.frames ['myFrame']. Document.getElementById (help);' в '$()' – crush

+0

Обратите внимание, что вы не можете использовать программирование X-Frame, если только вы работаете в одном домене с тем же протоколом. – ARMBouhali

ответ

4

aTag является DOM элемент, сделать его JQuery объект

$('html,body').animate({scrollTop: $(aTag).offset().top - 62},'slow'); 
+0

Спасибо! Это сделал трюк. Вот полный код, который я использую сейчас: 'function scrollToAnchorIframe (help) { var aTag = window.frames ['myFrame']. Document.getElementById (помощь); jQuery ('html, body'). Animate ({scrollTop: $ (aTag) .offset(). Top + $ ("# myFrame"). Offset(). Top - 62}, 'slow'); } ' – Georg

+0

@Georg Cheers !! –

+0

@Mohammad Adil: Спасибо, человек .. Хорошо работает. –

0

Если IFrame помещается внутри контейнера box, вот обновление, чтобы перейти вверх/вниз к привязке закладки iframe к контейнеру родительской страницы (примечание: «window.frames» имеет известную ошибку совместимости с браузером FF, поэтому я буду использовать «contentWindow» вместо):

function iframeBookmark(anchor) { 
mytag = document.getElementById("iframeID").contentWindow.document.getElementById(anchor); 
pos1 = $(mytag).offset().top; 
pos2 = $("#iframeID").offset().top; 
if (pos2 > pos1) { 
    $("#iframeContainerID").animate({scrollTop: pos2 - (pos2 - pos1) },'slow'); 
    } 
else { 
    $("#iframeContainerID").animate({scrollTop: pos2 + (pos1 - pos2) },'slow'); 
    } 
} 

Таким образом, когда мы вызываем функцию из родительского HTML, вверх/вниз прокрутки зависит от IFrame текущей позиции:

<a onclick="iframeBookmark('iframeBookmarkID')">...</a> 

... где «iframeBookmarkID» является идентификатор закладки -anchor на странице iframe.

Смежные вопросы