Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery и xml (https://javascript.ru/forum/jquery/15733-jquery-i-xml.html)

vladvk 11.03.2011 03:32

jQuery и xml
 
Совсем измучился, нужна помощь
вот код -
$(document).ready(function(){
        $.ajax({
    type: "GET",
    url: "011pags.xml",
    dataType: "xml",
 
    success: function(xml) {
	$('#kod_tovar1').keyup(function(){
$(xml).find("product").each(function()
                        {
						var id = $(this).attr('id')

						
						if ($('#kod_tovar1').val() == id)
				{						
                $('#nazvanie1').val($(this).attr('name'))
				$('#kod_tovar1').val($(this).attr('id'))
				$('#cena1').val($(this).attr('price'))
		    } 
         });	
       });
	   
		   
		            
       }
   }); 
});
    </script>

xml файл -
<page addtobag="1" category="12" id="2">
<product height="450" id="48555" name="Набор" price="$0" width="450" x="429" y="0">
<subproduct id="75182" name="Сумка" price="$0"/>
<subproduct id="19180" name="Ручка" price="$0"/>
</product>
</page>

как видно у product есть дочка subproduct как вытащить id одновременно у родителя и дочки чтобы потом сравнить с тем что ввел пользователь.

micscr 11.03.2011 08:32

ну так запускай в цикле еще и цикл по детям у product.

лучше предобработай эти данные сначала, а не бегай по дереву xml при каждом отпускании кнопки:
$xml = $(xml);
// И формируй следующую структуру:
data = {};
data[id] = {};
data[id].name =
data[id].price =

Эти данные сохрани в переменной объявленной в $(document).ready и обработчик keyup выведи в ready изнутри той функции.

vladvk 11.03.2011 09:44

Спасибо.
Можно поподробней по какому принципу формировать структуру data

micscr 11.03.2011 09:56

Я вроде написал:
пробегаешь по всем необходимым элементам(которые с id), имеешь им id, name, price.
Будет такой:
Код:

data[48555].name = 'Набор'
                .price = '$0'
data[75182].name = 'Сумка'
                .price = '$0'
...

Это будет объект со свойствами равными твоим id. Проверять так:
id = $(this).val();
if (id in data) {
  $(что то).val(data[id].name);
}

vladvk 11.03.2011 10:14

Мысль уловил спасибо.
А как правильно задать значения для data

micscr 11.03.2011 10:30

$('[price]').each(function(){
  var id = this.id;
  data[id] = {};
  data[id].name = $(this).attr('name');
  // ...
});

vladvk 11.03.2011 10:59

Господи все в голове смешалось, пните чтоли.
почему здесь - $('[price]').each(function(){

micscr 11.03.2011 11:06

изучайте основы джиквери !!!
Вам что надо - собрать данные с <product> и его <subproduct>. Чтобы не бегать по дереву, я их нахожу как имеющие атрибут price

vladvk 11.03.2011 11:34

Спасибо

vladvk 11.03.2011 13:53

Что то у меня не получается
$(document).ready(function(){
 $('#kod_tovar1').keyup(function(){
        $.ajax({
    type: "GET",
    url: "011pags.xml",
    dataType: "xml",
    success: function(xml) {
	
$xml = $(xml);
$('[price]').each(function(){
  var id = this.id;
	data[id] = {};
	data[id].name = $(this).attr('name');
	data[id].price = $(this).attr('price');
	 
id = $(this).val();
if (id in data) {
  $('#nazvanie1').val(data[id].name);
   $('#cena1').val(data[id].price);
}

   });     
                   
	   }
	   });
   }); 
});


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