Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнение DOM-элементов (https://javascript.ru/forum/misc/40047-sravnenie-dom-ehlementov.html)

bpystep 22.07.2013 22:10

Сравнение DOM-элементов
 
Приветствую. Есть 2 формы(дива, спана, кнопки и.т.д.):
<div id="div">
   <form action="" method="post" class="input_form">
      <input type="text"> //ну и еще что-то там
   </form>
   <form action="" method="post" class="input_form">
      <input type="date"> //ну и еще что-то там
   </form>
</div>

Как при сравнение получить вторую форму, если у меня есть первая:

var first_form = $('#div form:first');
var forms = $('#div').find('form');
for (var i=0; i<forms.length; i++) {
   if ($(forms[i]) != $(first_form )) {
	
   }
}

П.С. Я конечно понимаю, что можно дать формам разные id и проверять не объекты, а id. Но меня как раз интересует сравнение элементов как объектов.

рони 22.07.2013 23:07

bpystep,
а сравнение по индексу вас тоже неустраивает?

bpystep 22.07.2013 23:44

Цитата:

Сообщение от рони (Сообщение 263665)
а сравнение по индексу вас тоже неустраивает?

хм... В примере я указал, что беру первую форму по селектору, но на самом деле, я беру её так:
$('.input_form input').change(
   function() {
	var form = this;
	while (!($(form).get(0) instanceof HTMLFormElement)) {
		form = $(form).parent();
	}		
   }
);


поэтому я не знаю, какой индекс у формы... тогда встает другой вопрос, как найти индекс этой формы в родительском блоке? С помощью .index() пойдет?

рони 23.07.2013 00:20

Цитата:

Сообщение от bpystep
С помощью .index() пойдет?

да -- и у вас странный способ искать родителя с тегом форма достаточно var form = $(this).parents("form")

danik.js 23.07.2013 00:29

Функция $ всякий раз возвращает новый объект, ты вкурсе вообще?
Поэтому $(bla) никогда не будет равна $(blabla)
Сравнивай сами DOM-узлы. Хотя тут и этого не нужно.

ksa 23.07.2013 09:42

Цитата:

Сообщение от bpystep
Как при сравнение получить вторую форму, если у меня есть первая:

Не совсем понимаю про какое "сравнение" идет реч... Но у тебя всегда есть обе формы сразу. ;)

<!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=document.getElementById('div');
	var of=o.getElementsByTagName('form');
	// вот это первый...
	alert(of[0]);
	// а вот второй.
	alert(of[1]);
	// а это третий. 
	// три аккорда!
});
</script>
</head>
<body>
<div id="div">
	<form action="" method="post" class="input_form">
		<input type="text"> //ну и еще что-то там
	</form>
	<form action="" method="post" class="input_form">
		<input type="date"> //ну и еще что-то там
	</form>
</div>
</body>
</html>

bpystep 26.07.2013 03:46

Простите, что не отвечал, уезжал отдыхать :)
рони,
Спасибо, исправлюсь, с помощью .index() сделал, все работает.
danik.js,
А разве вот тут:
for (var i=0; i<forms.length; i++) {
   if ($(forms[i]) != $(first_form )) {
     
   }
}
сравниваются разные, когда цикл дойдет до той же формы, то и сравнение будет такое (по вашему примеру) таким:
$(bla) == $(bla)

ksa, К сожалению я не всегда буду знать индексы нужной мне формы, поэтому и ищем соответствующие индексы, как предложил
рони, спасибо всем за помощь!

danik.js 26.07.2013 04:56

bpystep, какая разница. Повторяю вновь: функция $ всякий раз возвращает новый объект, поэтому сравнение всегда будет давать отрицательный результат, даже если сравнивать $(bla) с $(bla). Проверь, дело трех секунд.

danik.js 26.07.2013 04:57

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
alert( $('html') == $('html') )
</script>

bpystep 26.07.2013 05:52

Цитата:

Сообщение от danik.js (Сообщение 264266)
bpystep, какая разница. Повторяю вновь: функция $ всякий раз возвращает новый объект, поэтому сравнение всегда будет давать отрицательный результат, даже если сравнивать $(bla) с $(bla). Проверь, дело трех секунд.

дак в этом то и заключался собственно вопрос :D


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