Форум русской поддержки Joomla!® CMS
05.12.2016, 02:28:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] jQuery и работа над элементами в iframe

 (Прочитано 10239 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« : 06.09.2013, 17:23:19 »

Такс, люди, нужна ваша помощь  Cheesy

Имеется iframe, в котором есть определенный блок с классом .col2 и инлайновой шириной, допусти style="width:50%"
По клику на определённый блок вне фрейма, я добавляю новый блок .col2, далее получаю новое кол-во всех .col2 (допустим было всего 2шт, с новым элементом стало 3)

А вот далее, мне надо задать новое значение ширины для всех! Этим значением будет уже не 50%, а 33.333333333333336%

И тут случился затык!

Код
$("iframe").contents().find(".col2").css("width", count+"%");

Добавляет ширину только во вновь добавленный блок! Ранее существующие идут лесом! .each() тоже вроде не работает

целиком всё
Код
jQuery(document).ready(function(){
$("#jform_params_content_menu-lbl").after("<div class='blank' id='addcols'><a>button</a></div>");
 
$( "#addcols" ).click(function(){
 
       $("iframe").contents().find(".right-menus").append("<div class='col2'>I'm in new Element!</div>");
            var count = 100/$("iframe").contents().find(".col2").length;
             alert(count);
 
       $("iframe").contents().find(".col2").css("width", count+"%");
   });
 
});


еще попробовала сначала удалить style , потом добавить.
как-то странно работает, только по отдельности

Код
$( "#addcols" ).click(function(){
$("iframe").contents().find(".col2").removeAttr('style'); //удалили style
       $("iframe").contents().find(".right-menus").append("<div class='col2'>I'm in new Element!</div>"); //вставили новый блок    
 
$("iframe").contents().find(".col2").attr('style', "width:'10px'"); //добавили новый атрибут
// и атрибут не добавился, сработали только первые 2 строчки
 });

короче или так, или так. вместе эти 3 строки не хотят работать


« Последнее редактирование: 07.09.2013, 02:32:33 от ELLE » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #1 : 06.09.2013, 20:36:12 »

А вызвать медод в iframe который будет все пересчитывать внутри него? (конечно если фрейм на вашем сайте, а не с чужого кусок)
Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #2 : 06.09.2013, 21:01:54 »

а если добавлять ко клику не .col2 а уже .col3 и тд.
потом расчет делать по if(.col2) if(.col3) и дт.
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2237


« Ответ #3 : 06.09.2013, 21:26:20 »

.css() - только первый элемент набора обрабатывает

$("iframe").contents().find(".col2").css("width", count+"%");

$("iframe").contents().find(".col2").each(function(){
  $(this).css("width", count+"%");
});

Цитировать
.each() тоже вроде не работает
а как пробовала?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #4 : 06.09.2013, 22:12:07 »

.css() - только первый элемент набора обрабатывает

$("iframe").contents().find(".col2").each(function(){
  $(this).css("width", count+"%");
});
а как пробовала?
нет, вот в данном случае .css() обрабатывает все вновь добавленные .col2, вне зависимости от их кол-ва, но не затрагивает те, что уже там были
пробовала и each() и map()
- не работает все равно

Показать текстовый блок
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #5 : 06.09.2013, 22:17:51 »

Цитировать
Кто хочет, можете сами попробовать в стандартном редакторе TinyMCE в админке. Код подключите только где-нибудь и замените селекторы на свои
А на песочницу  выложить http://jsfiddle.net/
И по рисунку. По логике кнопка в редакторе должна быть
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #6 : 06.09.2013, 22:31:06 »

Федор, это весь код что есть (первый в старт-посте), только jquery надо подключить и его; и селекторы вставить свои
у меня поле называется content_menu, соотвественно селектор - #jform_params_content_menu-lbl, вам нужно поменять на свое (можете в модуле html-код глянуть или в материале, где вам удобнее).
есть предположение, что просто скрипты редактора мешают (где-то перехватывают)
насчет кнопки, ну будет потом обычная кнопка редактора, только смысл в ней, если не отрабатывает пользовательский скрипт внутри редактора, а мне нужно жестко задавать разметку и пересчитывать ширину

Показать текстовый блок
« Последнее редактирование: 06.09.2013, 23:42:14 от ELLE » Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2237


« Ответ #7 : 07.09.2013, 02:16:04 »

Цитировать
Кто хочет, можете сами попробовать в стандартном редакторе TinyMCE в админке. Код подключите только где-нибудь и замените селекторы на свои
\administrator\templates\khepri\index.php
страница создания материала - TinyMCE
Код
<script type="text/javascript">
jQuery(function($) {
 $("#catid").after("<br /><br /><span id='addcols' style='cursor:pointer;'>ClickMe</span>");
 $("#addcols").on("click",function(){
   $("body",$("iframe#text_ifr").contents()).append("<div class='col2' style='text-align:center; float:left;'>Hi, ELLE!<br />It works!</div>");
   var count = 100/$("body",$("iframe#text_ifr").contents()).find(".col2").length;
   $("body",$("iframe#text_ifr").contents()).find(".col2").each(function(){
     $(this).css("width", count+"%");
   });
 });
});
</script>
« Последнее редактирование: 07.09.2013, 02:22:33 от fsv » Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #8 : 07.09.2013, 02:31:03 »

Оно-оно!  Cheesy Спасибо! Теперь все просто отлично  drink

-----------------

Хм, кстати зашла с Opera, и мой код работает... Shocked
Код
jQuery(document).ready(function(){
 
$("#catid").after("<div class='button2-left' style='margin:10px;'><div class='blank' id='addcols'><a>Добавить колонку</a></div></div>");
 
$( "#addcols" ).click(function(){
      $("iframe#text_ifr").contents().append("<div class='col2'>I'm in new Element!</div>");
      var count = 100/$("iframe#text_ifr").contents().find(".col2").length;      
  $("iframe#text_ifr").contents().find(".col2").css("width", count+"%");  
});
 
});
странно, видимо кеш...хотя чистила не раз

fsv, пробовал этот вариант?
« Последнее редактирование: 07.09.2013, 02:54:47 от ELLE » Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2237


« Ответ #9 : 09.09.2013, 01:22:00 »

Хм, кстати зашла с Opera, и мой код работает... Shocked
fsv, пробовал этот вариант?
Тогда в Opera не пробовал, в ней я тырнет бороздю, работаю только в FF.
Сейчас попробовал в FF/Opera/Chrome , не пошло: e is null
Записан
warlocksp
Живу я здесь
******

Репутация: +11/-4
Offline Offline

Пол: Мужской
Сообщений: 886


Красота и мудрость - в простоте....


« Ответ #10 : 22.06.2016, 15:32:52 »

Не подскажите по этому вопросу, не могу найти ответа...
http://joomlaforum.ru/index.php/topic,328578.msg1651603.html#msg1651603
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet