У меня есть html-файл, созданный с помощью cloudconvert.com, который я завернул с помощью java-скрипта, чтобы выделить текст внутри него и прокрутить до первого выделения, используя функцию прокрутки JQuery(). Смотрите пример:scrollTop не работает хорошо внутри iframe
function doSearch2(text,color) {
if (window.find && window.getSelection) {
document.designMode = "on";
var sel = window.getSelection();
sel.collapse(document.body, 0);
while (window.find(text)) {
document.execCommand("HiliteColor", false, color);
sel.collapseToEnd();
}
document.designMode = "off";
} else if (document.body.createTextRange) {
var textRange = document.body.createTextRange();
while (textRange.findText(text)) {
textRange.execCommand("BackColor", false, color);
textRange.collapse(false);
}
}
var sel2 = document.getSelection();
var seltop = $(sel2.anchorNode.parentElement).offset().top;
var doccurrenttop = $('#page-container').scrollTop();
var scrollto = doccurrenttop + seltop - 70; // spce of 70px
if (scrollto < 0) { scrollto = 0; }
$('#page-container').scrollTop(scrollto);
}
doSearch2("Cross","yellow");
Я пытаюсь вставить функцию doSearch2() в главе HTML файл и загрузить его на IFRAME внутри нового HTML документа. Затем я вызываю doSearch2() из кнопки внешнего документа.
ScrollTop отлично работает, за исключением некоторых случаев (например, прокрутки в нижней части документа и других случайных местоположений). Когда я его отлаживаю, я нахожу, что sel2 (= document.getSelection()) равно нулю.
Любые идеи?
Спасибо!
Спасибо Роберт, это работает отлично. Но я ищу прокрутку к определенному тексту (используя window.find()), который может быть изменен из run to run. Из-за этого прокрутка в постоянный элемент не распространяется на мой случай. – Reuven
Вы видели этот ответ? http://stackoverflow.com/questions/6677035/jquery-scroll-to-element –
Привет, Robert, Я видел ответы, подобные этому. Я попытался выполнить прокрутку, используя $ ('# iframe_element'). Content(). Find ('# container_element'). ScrollTop ($ ('# other_element'). Offset(). Top()) (other_element - обычный html элемент внутри container_element, а не выбор), и он работает (также используя анимацию). $ ('# iframe_element'). Contents(). Find ('# container_element'). ScrollTop (500) также работает. Мне кажется, что проблема заключается в выборе текста. Когда я отлаживаю это в хром-консоли, я вижу, что выбор по какой-то причине устанавливает 0. Спасибо. – Reuven