Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DOM - найти идентификатор родителя
 
 автор: aexb   (15.04.2008 в 17:02)   письмо автору
 
 

Есть такой код:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style>
.header { border-bottom: 1px dashed black; cursor: pointer; cursor: hand; }
#2, #3 { padding-top: 20px; }
.menu { width: 300px; height: 150px; background-color: black; color: white; display: none; }
</style>

<script>
function showLayer (divID) {
    $(divID + " > .menu").slideToggle( "fast" );
    var parentID = "???";
}
</script>

</head>
<div id="1">
    <span class="header" onclick="showLayer('#1'); return false;">Новые идеи и решения</span>
    <div class="menu">
        Тут будет текст на чорном <br/>
    </div>
</div>
<div id="2">
    <span class="header" onclick="showLayer('#2'); return false;">Старые идеи и старые решения</span>
    <div class="menu">
        Нет, друзья, так не пойдет :(
    </div>
</div>
<div id="3">
    <span class="header" onclick="showLayer('#3'); return false;">И еще третий пункт меню</span>
    <div class="menu">
        Превеееееед :)
    </div>
</div>
</html>

Можно ли каким-нибудь образом скриптом получить в переменную parentID идентификатор родителя для <span class="header"> (в моем случае родители это дивы #1, #2 и #3)?

   
 
 автор: CNTv2.0   (15.04.2008 в 18:41)   письмо автору
 
   для: aexb   (15.04.2008 в 17:02)
 

1. значения ID НИКОГДА не должны начинаться с цифры - об этом здесь писалось много-много раз. Так что уберите ваше неправильное <div id="1">, и пропишите правильное - напримр, <div id="d1">

2. Если значение ID родительского элемента вы передадите БЕЗ ИСКАЖЕНИЙ в качестве аргумента функции (например, onclick="showLayer ('d1'); return false;", то получить родительский объект внутри функции showLayer (divID) будет элементарно: var objparent = document.getElementById (divID);. А уж ID родителя и получать не надо - это и есть переменная divID в функции.

   
 
 автор: ONYX   (16.04.2008 в 04:57)   письмо автору
 
   для: aexb   (15.04.2008 в 17:02)
 

JQuery все упрощает
Я бы сделал вот так:
<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<style> 
.header { border-bottom: 1px dashed black; cursor: pointer; cursor: hand; } 
#d2, #d3 { padding-top: 20px; } 
.menu { width: 300px; height: 150px; background-color: black; color: white; display: none; } 
</style> 
</head> 
<body>
<div id="list">
<div id="d1"> 
    <span class="header" onClick="showLayer(); return false;">Новые идеи и решения</span> 
    <div class="menu"> 
        Тут будет текст на чорном <br/> 
    </div> 
</div> 
<div id="d2"> 
    <span class="header" onClick="showLayer(); return false;">Старые идеи и старые решения</span> 
    <div class="menu"> 
        Нет, друзья, так не пойдет :( 
    </div> 
</div> 
<div id="d3"> 
    <span class="header" onClick="showLayer(); return false;">И еще третий пункт меню</span> 
    <div class="menu"> 
        Превеееееед :) 
    </div> 
</div> 
</div>
</body>
<script> 
var list = $('#list').find('span');
list.click(function(){
    var parentID = $(this).parents('div').attr('id'); 
      $('#'+parentID).children('.menu').slideToggle( "fast" ); 
});
</script> 
</html> 

   
 
 автор: aexb   (16.04.2008 в 12:01)   письмо автору
 
   для: ONYX   (16.04.2008 в 04:57)
 

Спасибо, про нахождение родителя понял.
Теперь следующий вопрос. Модернизировал код вот так:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style>
.header { border-bottom: 1px dashed black; cursor: pointer; cursor: hand; }
#d2, #d3 { padding-top: 20px; }
.menu { width: 300px; height: 150px; background-color: black; color: white; display: none; }
.visible { display: block; }
</style>

<script>
$(document).ready( function() {
    $('span.header').click( function() {
        var parentID = $('span.header').parents('div').attr('id');
        alert (parentID);
    });
});
</script>

</head>
<div id="d1">
    <span class="header">Новые идеи и решения</span>
    <div class="menu visible">
        Тут будет текст на чорном <br/>
    </div>
</div>
<div id="d2">
    <span class="header">Старые идеи и старые решения</span>
    <div class="menu">
        Нет, друзья, так не пойдет :(
    </div>
</div>
<div id="d3">
    <span class="header">И еще третий пункт меню</span>
    <div class="menu">
        Превеееееед :)
    </div>
</div>
</html>

То есть, я хочу вообще обойтись без обработчика onClick и перехватывать события клика на определенном элементе. Перехватывается, но алёрт каждый раз возвращает d. Как с помощью жыкваери отсматривать все элементы?

   
 
 автор: aexb   (16.04.2008 в 19:33)   письмо автору
 
   для: aexb   (16.04.2008 в 12:01)
 

Глухо аки в танке :(

   
 
 автор: AlexSol   (16.04.2008 в 20:26)   письмо автору
 
   для: aexb   (16.04.2008 в 19:33)
 

var parentID = $(this).parents('div').attr('id');

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования