Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как получить значение из ассоциативного массива? (https://javascript.ru/forum/jquery/57433-kak-poluchit-znachenie-iz-associativnogo-massiva.html)

ligisayan 03.08.2015 17:07

Как получить значение из ассоциативного массива?
 
Всем привет. Мне нужно получить из массива значение price_html , т.е. <span class=\ "price\"><span class=\ "amount\">260.000 руб.<\/span><\/span>:
var variations_form = [{"variation_id":3354,"variation_is_visible":true,"variation_is_active":true,"is_purchasable":true,"display_price":260000,"display_regular_price":260000,"attributes":{"attribute_pa_size":"large"},"image_src":"","image_link":"","image_title":"","image_alt":"","price_html":"
<span class=\ "price\"><span class=\ "amount\">260.000 руб.<\/span><\/span>"

Навскидку вот так не прокатывает..
variations_form['price_html']

рони 03.08.2015 19:47

ligisayan,
если массив то наверно есть и индекс :-?

ligisayan 03.08.2015 20:43

Цитата:

Сообщение от рони (Сообщение 382608)
ligisayan,
если массив то наверно есть и индекс :-?

но ведь это ассоциативный массив где есть ключ-значение - не?

рони 03.08.2015 20:47

Цитата:

Сообщение от ligisayan
не?

сначала выбрать элемент массива - потом ключ этого элемента раз он обьект :-?

EmperioAf 03.08.2015 20:54

Цитата:

Сообщение от ligisayan
но ведь это ассоциативный массив где есть ключ-значение - не?

нет. То, что вы привели это массив у которого ключи цифры 0,1,2...
А по ключам получаете объекты

рони 03.08.2015 21:05

Цитата:

Сообщение от EmperioAf
А по ключам получаете объекты

:blink:
ligisayan, попробуйте решить сами, прежде чем нажать Показать исходный код
var variations_form = [{
    "variation_id": 3354,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 260000,
    "display_regular_price": 260000,
    "attributes": {
        "attribute_pa_size": "large"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": '<span class="price"><span class="amount">260.000 руб.</span></span>'
}];
alert(variations_form[0]["price_html"]);

EmperioAf 03.08.2015 21:16

Цитата:

Сообщение от рони
:blink:

я плохо выразился.
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <title>ГГ</title>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<link rel="stylesheet" href="test.css">
</head>
<body>
<script>
var variations_form = [{"variation_id":3354,"variation_is_visible":true,"variation_is_active":true,"is_purchasable":true,"display_price":260000,"display_regular_price":260000,"attributes":{"attribute_pa_size":"large"},"image_src":"","image_link":"","image_title":"","image_alt":"","price_html":"<span class=\"price\"><span class=\"amount\">260.000 руб.<\/span><\/span>"}];
alert(variations_form[0]['price_html']);

</script>
</body>
</html>

ligisayan 04.08.2015 10:17

рони, EmperioAf Делаю 3 вывода через консоль
console.log(variations_form);

console.log(variations_form[0]);

console.log(variations_form[0]['price_html']);


получаю:
[{"variation_id":3354,"variation_is_visible":true,"variation_is_active":true,"is_purchasable":true,"display_price":260000,"display_regular_price":260000,"attributes":{"attribute_pa_size":"large"},"image_src":"","image_link":"","image_title":"","image_alt":"","price_html":"<span class=\"price\"><span class=\"amount\">260.000 руб.<\/span><\/span>","availability_html":"","sku":"","weight":" kg","dimensions":"","min_qty":1,"max_qty":"","backorders_allowed":false,"is_in_stock":true,"is_downloadable":false,"is_virtual":false,"is_sold_individually":"no"},{"variation_id":3355,"variation_is_visible":true,"variation_is_active":true,"is_purchasable":true,"display_price":160000,"display_regular_price":160000,"attributes":{"attribute_pa_size":"medium"},"image_src":"","image_link":"","image_title":"","image_alt":"","price_html":"<span class=\"price\"><span class=\"amount\">160.000 руб.<\/span><\/span>","availability_html":"","sku":"","weight":" kg","dimensions":"","min_qty":1,"max_qty":"","backorders_allowed":false,"is_in_stock":true,"is_downloadable":false,"is_virtual":false,"is_sold_individually":"no"},{"variation_id":3356,"variation_is_visible":true,"variation_is_active":true,"is_purchasable":true,"display_price":80000,"display_regular_price":80000,"attributes":{"attribute_pa_size":"small"},"image_src":"","image_link":"","image_title":"","image_alt":"","price_html":"<span class=\"price\"><span class=\"amount\">80.000 руб.<\/span><\/span>","availability_html":"","sku":"","weight":" kg","dimensions":"","min_qty":1,"max_qty":"","backorders_allowed":false,"is_in_stock":true,"is_downloadable":false,"is_virtual":false,"is_sold_individually":"no"}]

[

undefined

но undefined - это не то, что мне нужно

рони 04.08.2015 10:44

ligisayan,
значит нет у вас ничего в variations_form на момент проверки
иначе всё нормально выводится
вывод третьего элемента массива
var variations_form =   [{
    "variation_id": 3354,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 260000,
    "display_regular_price": 260000,
    "attributes": {
        "attribute_pa_size": "large"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">260.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}, {
    "variation_id": 3355,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 160000,
    "display_regular_price": 160000,
    "attributes": {
        "attribute_pa_size": "medium"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">160.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}, {
    "variation_id": 3356,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 80000,
    "display_regular_price": 80000,
    "attributes": {
        "attribute_pa_size": "small"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">80.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}]
alert(variations_form[2]['price_html']);

ligisayan 04.08.2015 11:40

Цитата:

Сообщение от рони (Сообщение 382675)
ligisayan,
значит нет у вас ничего в variations_form на момент проверки
иначе всё нормально выводится
вывод третьего элемента массива

рони есть, т.к. console.log(variations_form[0]);
выводит первый символ массива '[', если 1 - то второй '{', 2 - 3ий '"' и т.д.

рони 04.08.2015 11:45

ligisayan,
variations_form это у вас обычный массив и обращаться к элементам можно по индексу -- а вот уже сам элемент
variations_form[0] ... или variations_form[2] обьект и в нём идёт обращение по ключам
Цитата:

Сообщение от ligisayan
'[', если 1 - то второй '{', 2 - 3ий '"' и т.д.

- да

самая длинная цепочка будет для примера
variations_form[2]["attributes"]["attribute_pa_size"]
variations_form - массив выбираем по индексу
variations_form[2] - обьект выбираем по ключу
variations_form[2]["attributes"] - снова обьект выбираем по ключу, был бы attributes обычный массив выбирали бы по индексу

ligisayan 04.08.2015 12:29

Цитата:

Сообщение от рони (Сообщение 382686)
ligisayan,
variations_form это у вас обычный массив и обращаться к элементам можно по индексу -- а вот уже сам элемент
variations_form[0] ... или variations_form[2] обьект и в нём идёт обращение по ключам
- да

самая длинная цепочка будет для примера
variations_form[2]["attributes"]["attribute_pa_size"]
variations_form - массив выбираем по индексу
variations_form[2] - обьект выбираем по ключу
variations_form[2]["attributes"] - снова обьект выбираем по ключу, был бы attributes обычный массив выбирали бы по индексу

нет, рони - для начала нужно было распарсить json
var variationsFormParsed = JSON.parse(variations_form);

и тогда уже можно обращаться к:
console.log(variationsFormParsed[0]['price_html']);

рони 04.08.2015 12:48

Цитата:

Сообщение от ligisayan
нет, рони - для начала нужно было распарсить json

абалдеть!!!:cray:

ligisayan 04.08.2015 13:50

Цитата:

Сообщение от рони (Сообщение 382695)
абалдеть!!!:cray:

рони А можно как-то вытянуть из
console.log(variations_form[0]['price_html']);

который равен:
<span class="price"><span class="amount">260.000 руб.</span></span>
класс price чтобы можно было поменять его стили?

рони 04.08.2015 18:16

Цитата:

Сообщение от ligisayan
класс price чтобы можно было поменять его стили?

непонятный вопрос -- что вам мешает добавить нужный css?

ligisayan 04.08.2015 18:22

Цитата:

Сообщение от рони (Сообщение 382731)
непонятный вопрос -- что вам мешает добавить нужный css?

var $oj = variations_form[0]['price_html'];
$($oj).filter(".price").css("top" , (height+32)+"px");
$($oj).filter(".price").html().replace(/(new price)/, "$1");


рони а каким образом? выше 2 варианта не работают..

рони 04.08.2015 18:26

ligisayan,
а где добавление на страницу ? или вам нужно в текст добавить?

ligisayan 04.08.2015 18:28

Цитата:

Сообщение от рони (Сообщение 382738)
ligisayan,
а где добавление на страницу ? или вам нужно в текст добавить?

что именно добавление - класса price? так он есть - мне нужно его стили просто поправить. достаточно и в текст добавить стили

рони 04.08.2015 18:42

ligisayan,
зачем это делать мне непонятно - есть же css на странице меняйте там стили и сервер меняйте там классы.

или уж создайте элемент на странице и украшивайте как хотите.
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title> <meta charset="utf-8">
</head>

<body>
<script>
  var variations_form =   [{
    "variation_id": 3354,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 260000,
    "display_regular_price": 260000,
    "attributes": {
        "attribute_pa_size": "large"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">260.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}, {
    "variation_id": 3355,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 160000,
    "display_regular_price": 160000,
    "attributes": {
        "attribute_pa_size": "medium"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">160.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}, {
    "variation_id": 3356,
    "variation_is_visible": true,
    "variation_is_active": true,
    "is_purchasable": true,
    "display_price": 80000,
    "display_regular_price": 80000,
    "attributes": {
        "attribute_pa_size": "small"
    },
    "image_src": "",
    "image_link": "",
    "image_title": "",
    "image_alt": "",
    "price_html": "<span class=\"price\"><span class=\"amount\">80.000 руб.<\/span><\/span>",
    "availability_html": "",
    "sku": "",
    "weight": " kg",
    "dimensions": "",
    "min_qty": 1,
    "max_qty": "",
    "backorders_allowed": false,
    "is_in_stock": true,
    "is_downloadable": false,
    "is_virtual": false,
    "is_sold_individually": "no"
}]

</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function(){
       var s = variations_form[2]['price_html'], height = 100;
      s = $('<div/>', {html : s});
      s.find('.price').addClass("new").css({"top": (height+32)+"px"});
      variations_form[2]['price_html'] =  s.html()
      alert(variations_form[2]['price_html'])
});
 </script>


</body>

</html>


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