|
|
|
|
|
для: OLi
(11.11.2012 в 23:55)
| | Видимо не поняли, если такой вопрос задаете. Этот вопрос никак не связан с первым вашим, а уж тем более с моим ответом, в котором я и отдаленно не намекал на то, что в подобном блоке нельзя скрыть дочерей 1,2,3.
jQuery, это не язык программирования, а библиотека, которая оперирует возможностями исключительно JS, а ни чем-то иным. И если JS прекрасно знает о родителях, предках, дочерях и братьях, о коллекциях на странице, и может ими оперировать, то странно было бы, если библиотека jquery не содержала бы в себе подобных методов, и не дополняла бы иных возможностей. Есть, и можете обратиться к этим элементам как по селектору набора, или как индексам, или как к срезу.
Я вам говорил совсем о другом:
- если вы добавляете в атрибут класса еще класс, наугад, не зная потом как его определить, это плохо.
- если это добавление класса служит для обращения к элементам, то это не просто плохо, это крайне расточительно.
Я говорил о том, что, если, например, на странице есть четыре меню, два левых, два правых, а также просто блоки левые и правые, у которых есть общее стилевое оформление, и есть различия, то оформлять эти стили надо не абы как попало с именами, а так, чтобы и удобно было для возможного редактирования/изменения, плюс легкое для восприятия и запоминания. При этом использовать составные имена классов (через пробел), вот для этого это в самый раз:
.blocks {style}
.left {style}
.right {style}
.menu {style}
class="blocks left menu"
class="blocks right menu"
class="blocks left"
class="blocks right"
| Рассказывать еще о такой выгоде против бах_трах_страх или не стоит? Но это исключительно для оформления, а никак не для того, чтобы гонять ресурсы поиском и разбором таких классов, ради обращения к элементу.
А обращаться надо по id, и их лучше группировать по иному принципу (не смотря на то, что есть селектор и в CSS, и jquery, для значений разделенных пробелом), так, чтобы это было и одно имя, и в тоже время можно было выбирать группу по таким именам. Вот это я и пытался объяснить ранее. | |
|
|
|
|
|
|
|
для: confirm
(11.11.2012 в 17:22)
| | понял. т-е если есть такая структура:
<div class="blocks_menu">
<div></div //1
<div> //2
<div></div>
<div></div>
<div></div>
</div>
<div></div>//3
</div>
|
То никак, без определения класса для div внутри class="blocks_menu - не скрыть все блоки div 1,2,3? | |
|
|
|
|
|
|
|
для: OLi
(11.11.2012 в 15:42)
| | Естественно ноль, потому и не получается у вас. А с чего вы думаете, что он должен был найти элемент по такому имени класса?
Это в атрибуте элемента class указываете несколько классов разделяя их пробелами, а вот обратиться к такому элементу по классу можно только указав сразу два класса, например такими методами:
alert($('.view_rest_full.tab_1').length);
alert($('div.view_rest_full').filter('.tab_1').length);
|
Составное имя класса (из двух и более классов) полезно тогда, когда в некой однотипной группе надо выделить индивидуальность для некоторых из них. При этом порядок имен классов в атрибуте class не важен. Это означает, что для вашего правила (выбор по шаблону с начала атрибута), нужно поместить класс tab_X в начало, и тогда у вас все будет работать. Либо не помещать в начало, и использовать другой шаблон поиска, например:
Удобно ли вообще у вас именование? Я вроде бы говорил вам, что существует удобный селектор как в CSS, так и в jquery, это выбор элемента по значению атрибута разделенного дефисами - aaa-bbb-ccc- и так до восьмерки на боку.
Этот селектор позволяет простым способом сгруппировать элементы не только по классам, но и по идентификатору, да и по любым другим атрибутам элементов:
input[name|=a] {color: #f00;}
<input name="a-1" value="1" />
<input name="b-1" value="2" />
<input name="a-2" value="3" />
|
По смыслу этот селектор можно было бы описать так:
правило общее для всех дефис правило для подгруппы А в группе дефис правило для подгруппы В в группе...
А именовать moe_tam_plus_div da_tab_1 ... и у каждого еще и индивидуальность, да еще разбор затруднителен... ну к чему это? | |
|
|
|
|
|
|
|
для: confirm
(11.11.2012 в 07:14)
| | Выводит 0. Как правильно тогда сделать? | |
|
|
|
|
|
|
|
для: OLi
(10.11.2012 в 20:07)
| | Надо всегда помнить о том, что обращение к элементам по классам, это крайний метод, и если его используете, то хотя бы ограничивайте область поиска - перед классом указывайте тег нужного элемента, то есть, не $('.tabs_instan'), а $('div.tabs_instan').
Если этот элемент у вас как контейнер родитель, то лучше задать ему id, и обращаться по id, а не классу.
>нужно отобразить лишь те блоки tab_ которые есть в родительском блоке intans
И где видно, что данный элемент является дочерним для intans? И где сам intans? Если вы это написали с сокращением для tabs_instan, чтобы не сильно утомлять свои руки, то думайте о мозгах чужих, которым придется думать над вашим вопросом.
Выполните, вот такое для вашего html-кода: alert($('div[class^=tab_]').length). Что показывает? Правильно, фигушки. Вся котовасия у вас от непродуманности как в идентификации элементов, так и в именах их стилей. | |
|
|
|
|
|
|
|
<div class="tabs_instan"><span rel="1">Подробнее</span>|<span rel="3">Кратко</span>|<span rel="2">На карте</span></div>
<div class="view_rest_full tab_1"></div>
$('.tabs_instan').on('click','span', function(e){
e.preventDefault();
$('div[class^=tab_]').css('display','none');
var tab = $(this).attr('rel');
$('.tab_'+tab).toggle();
});
|
По клику на span элемента div class="tabs_instan", не происходит отображение блока с class="tab_1", блок tab_1 подгружается на страницу, нужно отобразить лишь те блоки tab_ которые есть в родительском блоке intans в котором произошел клик. | |
|
|
| |
|