Создание простенькой карты с возможностью скрытия(отображения) элементов
Привет всем. Появилась задачка небольшая, впринципе нашел решение..но хочется как то упростить код.
Задача: Создать карту с нанесенными на нее метками. Я создал примитивный макет (Серое поле - это типа карта, красные зеленые и синие дивы на этой карте - это типа метки). Также есть небольшая менюшка для скрытия\отображения меток. Тобишь при клике на ссылку "Красный" скрываются(отображаются) красные метки, при клике на ссылку "Зеленый" скрываются(отображаются) зеленые метки и т.д. вот мой код: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ $('a.one').click( function(){ var elem = $('div.one'); if(elem.is(":hidden")){ elem.show(); } else{ elem.hide(); } }); $('a.two').click( function(){ var elem = $('div.two'); if(elem.is(":hidden")){ elem.show(); } else{ elem.hide(); } }); $('a.three').click( function(){ var elem = $('div.three'); if(elem.is(":hidden")){ elem.show(); } else{ elem.hide(); } }); }); </script> <style type="text/css"> div.map { width:200px; height:200px; position: relative; background:#CCC; } div.map div { width:10px; height:10px; position: absolute; } div.one { background:#0F0; } div.two { background:#F00; } div.three { background: #00F; } </style> </head> <body> <div class="map"> <div class="one" style="top:10px; left:10px;"></div> <div class="one" style="top:30px; left:30px;"></div> <div class="one" style="top:50px; left:10px;"></div> <div class="two" style="top:10px; left:30px;"></div> <div class="two" style="top:30px; left:10px;"></div> <div class="two" style="top:50px; left:30px;"></div> <div class="three" style="top:50px; left:50px;"></div> </div> <div class="menu"> <a class="one" href="#">Зеленый</a><br /> <a class="two" href="#">Красный</a><br /> <a class="three" href="#">Синий</a> </div> </body> </html> Код работает...НО! если обратить внимание на код JAVASCRIPT то любой уважающий себя программист скажет что это не совсем удобно...Сделать как то надо чтобы при нажатии на ссылку в <DIV CLASS="MENU"> функция javascript сама чтобы определила CLASS у этой ссылки, нашла DIV с таким же классом и скрыла его.... Вот как это сделать ребят?! я не могу сообразить...подскажите..мо ет кто сталкивался с подобной проблемой?! |
jQuery.ready(function($){
var marks = {};
var $allMarks = $("div.map>div");
var reNameOfMarks = /\b(?:one|two|three)\b/;
marks['one'] = $allMarks.filter("one");
marks['two'] = $allMarks.filter("two");
marks['three'] = $allMarks.filter("three");
$("div.menu").delegate('a',"click", function( e ){
var name = reNameOfMarks.exec(e.currentTarget.className);
if ( name.length && marks.hasOwnProperty( name[0] ) ) {
marks[ name[0] ].toggle();
}
});
});
|
nikita.mmf , я не хочу что бы в коде фигурировала ONE, TWO , THREE
я вот пытаюсь вот что сделать...простенько....но только как прально условие написать?!
$('div.menu a').click(
function(){
var clas = $(this).attr("class");
if(div.hasClass(clas)){
СКРЫТЬ ЭТОТ ДИВ КОТОРЫЙ ИМЕЕТ ТАКОЙ КЛАСС
}
});
вот какой сценарий писать чтобы скрыть его?! |
Даже вот так.....
$('div.menu a').click(
function(){
var clas = $(this).attr("class");
$('div').hasClass(clas).hide();
});
не могу понять почему он это не выполняет?! |
$('div.menu a').click(function(){
$('div').filter( "." + this.className ).hide();
});
|
Чуток усовершенствовал код
$('div.menu a').click(function(){
if($('div').filter( "." + this.className ).is(":hidden")){
$('div').filter( "." + this.className ).show();
}
else{
$('div').filter( "." + this.className ).hide();
}
});
теперь при первом клике он его скрывает, при втором клике отображает NIKITA.mmf спасибо .... |
в jQuery есть функция toggle
|
Я стараюсь не использовать эту функцию.....а все потомучто если для отображения использовать show() в этой функции toggle то у меня все в норме ....а если использовал бы я slideDown(200) для отображения ДИВА с большим количесвом символов в нем...то там небольшой глюк случается....что то типа небольшого "скочка" при завершении анимации.
|
| Часовой пояс GMT +3, время: 10:19. |