jQuery « Подсветка активного элемента внутри стороннего дива
Дан список, который, по клику, подсвечивает элемент в диве. В приведенной ниже конструкции, подсветка возможна единожды, и, навсегда. Подскажите пожалуйста, как сделать красиво!?
* под красотой, следующее: клик по "Первому" - добавили класс "Первому блоку", клик по "Второму" - второй подсветили, а первый обнулили, и так далее...).
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .html4strict.geshi_code {font-family:monospace;} .html4strict.geshi_code .imp {font-weight: bold; color: red;} .html4strict.geshi_code .kw2 {color: #000000; font-weight: bold;} .html4strict.geshi_code .kw3 {color: #000066;} .html4strict.geshi_code .es0 {color: #000099; font-weight: bold;} .html4strict.geshi_code .br0 {color: #66cc66;} .html4strict.geshi_code .sy0 {color: #66cc66;} .html4strict.geshi_code .st0 {color: #ff0000;} .html4strict.geshi_code .nu0 {color: #cc66cc;} .html4strict.geshi_code .sc-1 {color: #808080; font-style: italic;} .html4strict.geshi_code .sc0 {color: #00bbdd;} .html4strict.geshi_code .sc1 {color: #ddbb00;} .html4strict.geshi_code .sc2 {color: #009900;} .html4strict.geshi_code span.xtra { display:block; }
<ul>
<li><a href='#n1'>Первый</a></li>
<li><a href='#n2'>Второй</a></li>
<li><a href='#n3'>Третий</a></li>
</ul>
<div id='content'>
<ul>
<li id='n1'>Первый блок</li>
<li id='n2'>Второй блок</li>
<li id='n3'>Третий блок</li>
</ul>
</div>
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }
<script>
$(document).ready(function() {
$('ul a').click(function(e) {
var clickId = $(this).attr('href');
$('li#n1').addClass('active');
});
});
</script>
* под красотой, следующее: клик по "Первому" - добавили класс "Первому блоку", клик по "Второму" - второй подсветили, а первый обнулили, и так далее...).
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .html4strict.geshi_code {font-family:monospace;} .html4strict.geshi_code .imp {font-weight: bold; color: red;} .html4strict.geshi_code .kw2 {color: #000000; font-weight: bold;} .html4strict.geshi_code .kw3 {color: #000066;} .html4strict.geshi_code .es0 {color: #000099; font-weight: bold;} .html4strict.geshi_code .br0 {color: #66cc66;} .html4strict.geshi_code .sy0 {color: #66cc66;} .html4strict.geshi_code .st0 {color: #ff0000;} .html4strict.geshi_code .nu0 {color: #cc66cc;} .html4strict.geshi_code .sc-1 {color: #808080; font-style: italic;} .html4strict.geshi_code .sc0 {color: #00bbdd;} .html4strict.geshi_code .sc1 {color: #ddbb00;} .html4strict.geshi_code .sc2 {color: #009900;} .html4strict.geshi_code span.xtra { display:block; }
<ul>
<li><a href='#n1'>Первый</a></li>
<li><a href='#n2'>Второй</a></li>
<li><a href='#n3'>Третий</a></li>
</ul>
<div id='content'>
<ul>
<li id='n1'>Первый блок</li>
<li id='n2'>Второй блок</li>
<li id='n3'>Третий блок</li>
</ul>
</div>
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }
<script>
$(document).ready(function() {
$('ul a').click(function(e) {
var clickId = $(this).attr('href');
$('li#n1').addClass('active');
});
});
</script>
1 ответов
Спасибо, оба прекрасны!
UPD1. Нюансы таковы, в первом варианте (см. ниже) не уточняется конкретный див #content, во-втором, с уточнением все в порядке, но физически линки не задействованы, что не есть плохо, так тоже нужно.
UPD2. Также, вариант с b-list-item не предусматривает такого выделения блока, когда задана, к примеру, такая последовательность (выделяются блоки 1-2-3, а не 1-3-6, как задано):
<div class="b-block b-init">
<ul class="b-list">
<li class="b-list-item"><span>Первый</span></li>
<li class="b-list-item"><span>Третий</span></li>
<li class="b-list-item"><span>Шестой</span></li>
</ul>
</div>
<div class="b-block b-target">
<ul class="b-list">
<li class="b-list-item">1</li>
<li>2</li>
<li class="b-list-item">3</li>
<li>4</li>
<li>5</li>
<li class="b-list-item">6</li>
</ul>
</div>
От Bluesbro:
<ul>
<li><a href='#n1'>Первый</a></li>
<li><a href='#n2'>Второй</a></li>
<li><a href='#n3'>Третий</a></li>
</ul>
<div id='content'>
<ul>
<li id='n1'>Первый блок</li>
<li id='n2'>Второй блок</li>
<li id='n3'>Третий блок</li>
</ul>
</div>
$(document).ready(function() {
$('ul a').click(function() {
var clickId = $(this).attr('href');
$(clickId).addClass('active').siblings().removeClass('active');
});
});
От Vend3tta:
<div class="b-block b-init">
<ul class="b-list">
<li class="b-list-item"><span>Первый</span></li>
<li class="b-list-item"><span>Второй</span></li>
<li class="b-list-item"><span>Третий</span></li>
</ul>
</div>
<div class="b-block b-target">
<ul class="b-list">
<li class="b-list-item">Первый блок</li>
<li class="b-list-item">Второй блок</li>
<li class="b-list-item">Третий блок</li>
</ul>
</div>
var $t = $('.b-target').find('.b-list');
var active_class = 'b-list-item_active';
$('.b-init').find('span').click(function() {
var index = $(this).parent().index();
$t.children().removeClass(active_class);
$t.children().eq(index).addClass(active_class);
})
А теперь внимание, для полноты и без того совершенной архитектуры, как:
1.
2. При первом открытии подсвечивать:
- только произвольный линк;
- только произвольный блок;
- оба (важно! выделение только до момента действия);
UPD3. Вариант с синхроничным подсвечивание реализовать удалось (вероятно можно сделать и короче).
http://jsfiddle.net/capricorn/SDJKQ/
$(document).ready(function() {
$('ul a').click(function() {
var clickId = $(this).attr('href');
$(clickId).addClass('active').siblings().removeClass('active');
});
});
$(document).ready(function(){
$('ul a').click(function(){
$('ul a').removeClass('active');
$(this).addClass('active')
})
});
Спасибо Bluesbro, рассмотрим крайний вариант. Все просто великолепно, за исключением одного - переход внутри дива. Помимо этого, действие не будет совершаться без поддержки явы (хоть и лишние якорные ссылки запросто могут ввести в заблуждение неискушенного пользователя).