Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   closest(). Как найти элемент в толпе? (https://javascript.ru/forum/jquery/11303-closest-kak-najjti-ehlement-v-tolpe.html)

Viper 17.08.2010 11:46

closest(). Как найти элемент в толпе?
 
Ломаю стену 3й час... Никак не могу понят одного...
Есть код:
<div class="parent">
	<div class="item">
		<div class="folder">
		<div class="result">&nbsp;</div>
		...
			<img ... />
			<a class="add"><img ... /></a>
		...
		</div>
	</div>
	<div class="item">
	...
</div>


и некий скрипт:
$("a#add").click(function(e){
	e.preventDefault();
	$.ajax({
		url: $(this).attr("href"),
		success: function(data) {
			$(this).closest(".result").text(data);
		}
	});
});


Почему в div.result не выводится текст?
Если указать жестко селектор, то выводится у первого div.result из списка(а их в списке n).

exec 17.08.2010 11:50

.result не является родителем #add

PeaceCoder 17.08.2010 12:51

не $("a#add")
а 
$("a.add")

класс и id разные вещи

Viper 17.08.2010 13:57

PeaceCoder опечатался в коде.

exec,
натолкнули на мыслю :)

$(this).closest("div").prev().fadeOut();
как-то так

e1f 17.08.2010 14:21

$("a#add").click(function(e){ 
    var that = $(e.target).closest('a');
    e.preventDefault(); 
    $.ajax({ 
        url: $(this).attr("href"), 
        success: function(data) { 
*!*
            //$(this).closest(".result").text(data);
*/!*
            $(that).closest(".result").text(data);
        } 
    }); 
});


А чем здесь является this, товарищи? Скорее всего XHR.

Viper 17.08.2010 15:35

e1f да вы правы. часть $(that).closest(".result")... почему-то не сработала, а
$(that).closest("div").prev()... отработало как положено.

e1f 17.08.2010 15:42

Тьфу, у вас разметка табами сбита, не увидел, что a не в result.
Не почему-то не сработала, а так и надо.

Андрей38 22.11.2011 13:27

Товарищи-Гуру.
Подскажите пожайлуста.Вопрос на счет поиска парента.
Аж 3 варианта для:

<div >
<div ><p><img id='Nam'></p></div>
</div>

1
$('img[id='Nam']').closest('div' )
2
$('img[id='Nam']').parent().parent('div' )
3
$('div:has(img[id='Nam])')
ЧТО найдет этот парент имиджа БЫСТРЕЕ?
так как ВСЕ работают ОДИНАКОВО

ksa 22.11.2011 13:59

Андрей38, предложу такой вариант... :)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function() {
*!*
	var o=$('#Nam').parents('div');
*/!*
	alert(o.get(0).className);
});
</script>
</head>
<body>
<div >
	<div class='test'>
		<p><img id='Nam'></p>
	</div>
</div>
</body>
</html>


Поскольку ты с атрибутами явно перемудрил... ;)

Андрей38 22.11.2011 14:12

Спасибо КСА! Буду разбираться...
А ,кажеться этот ГЕТ тоже что и индекс?
А так_ на прямую_
$('div ').find('.test')
будет еще быстрее ?


Часовой пояс GMT +3, время: 23:38.