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,
почему не работает и как исправить написал вам выше

рони 19.06.2015 12:31

ninja2, исправленный вариант, можно сделать и по другому но проще через map или each
<!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(k) {
                    return function() {
                        $(a[k]).text(this.value);
                    }
                })(i)
            }
        });
        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>

ninja2 19.06.2015 12:49

Цитата:

Сообщение от рони
исправленный вариант, можно сделать и по другому но проще через map или each

Та я тоже уже исправил, через map и each наверно не получится. Нужно брать два блока-два массива и их одновременно обходить, а map и each только один массив обходят.

input: function(x) {
						return function(){
							$(a[x]).text(this.value);//эта строчка не правильная
						}
					}(i)


А что (i) означает в конце, это типо в место x и в функцию передавать или копию i?. Синтаксис запутаный.

рони 19.06.2015 12:58

Цитата:

Сообщение от ninja2
map и each наверно не получится

получится хоть 10 массивов если все они одного размера
Цитата:

Сообщение от ninja2
А что (i) означает в конце

выполнить функцию с параметром i

ninja2 19.06.2015 13:14

Цитата:

Сообщение от рони
получится хоть 10 массивов если все они одного размера

и как в map передать 2 массива?

ninja2 19.06.2015 13:16

от типо код, и куда второй дописать? :)
var mass1=new Array(),mass2=new Array();
	var a;
	a=map(mass1,function(){});

Я через цыклы решил делать потому что через map не получилось 2 массива передать.

Наверно лучше через цыкл делать, универсальнее

рони 19.06.2015 13:24

ninja2,

var mass1=new Array(),mass2=new Array();
var a , c = [];
a=map(mass1,function(a,b){
c[b] = mass2[b];
return a
});

ninja2 19.06.2015 14:07

От еще не получается добавить тег data, от этот код не работает
var z=$("</p>",{
			data: {
				b:i
			}
		});

Прошлый код был такой
c = $("<p/>", {
                      data: {
                        b: b
                      }
                    });

где b присваивается индекc из map.

У меня идет сортировка по map, Но у меня оно не сортирует. Пробовал тоже сделать через функцию типо так
data: {
				b: function(x){
					return function(){
						return a[x];
					}
				}(i)
			}

та и просто
data: {
				b: function(x){
					return function(){
						x;
					}
				}(i)

и так
data: {
				b: function(x){
					return function(){
						x;
					}
				}(i)

Ниче не работает, не сортирует, а в коде не могу посмотрить присвоило ли дата или нет. Это походу не индексы, а объекты идут.

ninja2 19.06.2015 15:09

Почему через цикл когда делаю данный код не работает?
var z=$("</p>",{
			data: {
				b: a[i]
			}
		});

У меня у параграфа не появляется data b, когда делается через map то появляется, и от когда так делаю z.data("b",a[i]);, то добавляется, в чем может быть проблема?

ninja2 19.06.2015 15:12

У меня в data пусто даже когда я явно укажу
var z=$("</p>",{
			data: {
				b: "b"
			}
		});

А от так от появляется bb z.data("bb","hellow);. И через map работает от такой код, тоже появляется data
c = $("<p/>", {
                      data: {
                        b: b
                      }

Коды одинаковые, ничего ж не менял, а че в одном случае работает, а в другом пустота хз. Мб. где ошибку сделал не знаю.


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