Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   из двух массивов jquery получить доступ к элементам и создать третий? (https://javascript.ru/forum/misc/56502-iz-dvukh-massivov-jquery-poluchit-dostup-k-ehlementam-i-sozdat-tretijj.html)

ninja2 19.06.2015 10:38

из двух массивов jquery получить доступ к элементам и создать третий?
 
Здорова!
Нужно элементы из двух блоков прочитать, получить доступ к значениям и создать третий блок, как мне получить доступ к элементам из блоков? Пытаюсь в цикле обойти не получается получить доступ к атрибутам.
Вот код:
$(function() {
	//1 получаем массивы элементов
	var a=$("#menu a");
	var c=$("#content div");
	
	//2. обходим элементы в цикле
	for(i=0;i<c.length;i++)
	{
		//alert(a.attr("href"));//работает, но возвращает постоянно первый элемент
		//alert(a[i].href);//работает полную ссылку возвращает
		//alert(c[i].id);//работает возвращает каждый раз разные айди
		alert(c[i].text);//не работает
	}
	
});


Как можно получить доступ в цикле к данным javaScript??? Например не могу получить доступ в цикле к тексту что находится между тегов <div></div>, запись c[i].text не работает.

Endy 19.06.2015 11:15

alert($(c[i]).text());

tsigel 19.06.2015 11:24

ninja2,
c.eq(i).text()

Если пользуете библиотеку то читайте её апи, это не массивы элементов, а jQuery объекты. Перебор их элементов через метод each

tsigel 19.06.2015 11:35

var a=$("#menu a");
a.each(function () {
  alert($(this).text());
});

ninja2 19.06.2015 12:12

работает, а от я создал еще один кот, пытаюсь событие input добавить к ссылке и вывожу текстовое поле, но почему то не добавляется событие input к форме и ссылке.
Вот код:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <style type="text/css">
      #menu a{
        margin: 5px;
      }
    </style>

   <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

  <script>
$(function() {
	//1 получаем массивы элементов
	var a=$("#menu a");
	var d=new Array();
	//2. обходим элементы в цикле
	for(i=0;i<a.length;i++)
	{
		var j=$("<input/>",{
			val: $(a[i]).text(),
			on: {
					input: function() {
					  $(a[i]).text(this.value);
					}
				}
		});		
		d[i]=j;
	}
	$("#edit").append(d);
});

  </script>
</head>
<body>
<div id="menu">
   <a href="#dfdf">1df</a>
   <a href="#fgg44">2fsdfsd</a>
   <a href="#Df324">3dsfdsf</a>
   <a href="#dfs33">4sdfsdf</a>
   <a href="#dfs35">5kkk</a>
</div>
<hr>
<div id="edit"></div>

</body>
</html>


в старом коде там идет перебор через map и там так написано:
var d = $("<input/>", 
					{
                      val: $(b).text(),
                      on: {
                        input: function() {
                          $(b).text(this.value)
                        }
                      }
                    });

этот работает, а почему мой не работает?

рони 19.06.2015 12:14

ninja2, :)
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   #menu a{
    margin: 5px;
  }

  </style>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

  <script>
$(function() {
    function c() {
        var a = $("#menu a"),
            a = $.map(a, function(a) {
                return a.text
            });
        return a
    }
    alert(c().join("\n"));;

});
  </script>
</head>
<body>
<div id="menu">
   <a href="#dfdf">1df</a>
   <a href="#fgg44">2fsdfsd</a>
   <a href="#Df324">3dsfdsf</a>
   <a href="#dfs33">4sdfsdf</a>
 </div>
</body>
</html>

рони 19.06.2015 12:19

Цитата:

Сообщение от ninja2
а почему мой не работает?

потому что используя for переменная i на момент обработки событий становится 5, а элемента a[5] на который стали завязаны все созданные инпуты не существует.

рони 19.06.2015 12:22

ninja2,
почему не работает боолее подробно читать тут http://javascript.ru/basic/closure#p...-ispolzovaniya

ninja2 19.06.2015 12:26

рони,
это не то, нужно событие input добавить к полю input чтобы работало
Этот код не работает:
var j=$("<input/>",{
			val: $(a[i]).text(),
			on: {
					input: function() {
					  $(a[i]).text($(d[i]).text);//эта строчка не правильная
					}
				}
		});


Пробовал по разному $(a[i]).text(this.value); так не работает и так тоже нет $(a[i]).text($(j[i]).text());

рони 19.06.2015 12:31

ninja2,
почему не работает и как исправить написал вам выше


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