Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   В iframe применить стиль родительского окна (https://javascript.ru/forum/dom-window/22110-v-iframe-primenit-stil-roditelskogo-okna.html)

Nikoole 06.10.2011 18:08

В iframe применить стиль родительского окна
 
Добрый вечер.
Стоит задача в iframe подгрузить нужный документ (это сделано) и при наведении мышки в этом iframe на тег <p> менять цвет его background'а.

Меняю цвет фона тега <p> при помощи addClass('имя класса'), но т.к. это iframe, то в нем этот класс не определен. Как применить к iframe класс родительского окна? Возможно ли это вообще?
Вот такой код есть:
$('iframe#didacticfileContent').load(function()
	{
		$(this).contents().find('p').mouseover(function () {
			if(typeof($(this).find('a').attr('name')) != 'undefined')
			{
				$(this).find('a').parents('p').addClass('light'); 
				$(this).find('a').parents('p').css('cursor', 'pointer');
			}
		});
	});


(он подсвечивает теги <p> внутри которых есть якорь).

ksa 06.10.2011 19:18

Цитата:

Сообщение от Nikoole
Возможно ли это вообще?

А как стили подключены на родительской странице?

И за тобой тестовый пример...

Nikoole 06.10.2011 19:46

На родительской странице просто:
<style type="text/css">
.light {
	background: #efefef;
}
.checked {
	background: #9f9;
}</style>

Вот вся функция, которая вызывается при изменении src iframe:
function lightAnchors()
{
	$('iframe#didacticfileContent').load(function()
	{
		$(this).contents().find('p').mouseover(function () {
			if(typeof($(this).find('a').attr('name')) != 'undefined')
			{
				$(this).find('a').parents('p').addClass('light'); //css('background', '#eee');
				$(this).find('a').parents('p').css('cursor', 'pointer');
			}
		});
		$(this).contents().find('p').mouseout(function ()
		{
			if(typeof($(this).find('a').attr('name')) != 'undefined')
			{
				$(this).find('a').parents('p').removeClass('light');
			}
  		});
		$(this).findcontents().('p').click(function () 
		{
			if(typeof($(this).find('a').attr('name')) != 'undefined')
			{
				$(this).find('a').parents('p').toggleClass('checked');
			}
    		});
	});

}

(по коду: меняю цвет тега только в том случае, если внутри него есть тег a с установленным name)
Она работает, но в iframe не видны стили родительской страницы. Т.е. они применяются, но на внешний вид элементов не влияют, т.к. в iframe они не определены. (Не знаю важно это или нет, но iframe - это вполне себе веб-страница с <body> <html> и т.д...)

Nikoole 06.10.2011 20:07

На данный момент решаю задачу так:
$('iframe#didacticfileContent').load(function()
	{
		$(this).contents().find('head').append('<style type="text/css"> .light {background: #efefef;} .checked {background: #9f9;}</style>');
// и дальше то же, что и в предыдущем сообщении...


Т.е. добавляю свои стили в разметку в iframe

dmitriymar 06.10.2011 20:39

а страница основная и в фрейме с одного сайта?

Nikoole 06.10.2011 20:44

Да, с одного.
Сейчас уже есть решение (в сообщении выше) Но теперь вопрос на сколько оно верное...

ksa 06.10.2011 21:50

Цитата:

Сообщение от Nikoole (Сообщение 130021)
На данный момент решаю задачу так:
$('iframe#didacticfileContent').load(function()
	{
		$(this).contents().find('head').append('<style type="text/css"> .light {background: #efefef;} .checked {background: #9f9;}</style>');
// и дальше то же, что и в предыдущем сообщении...


Т.е. добавляю свои стили в разметку в iframe

Так ты в шаге от решения! :)
Прочитай html() родительского style... Добавь style в ифрейм, а потом заполни его, прочитаным ранее, хтмэлем...


Часовой пояс GMT +3, время: 12:31.