2016-11-18 5 views
0

Я не могу понять, где я ошибаюсь. Я пытался так много возможностей и ответов найти на SO, но это просто не дает мне значение пользовательского атрибута attr-pid "javascript json jquery can not get custom value value

<div class="prod-col et_pb_column et_pb_column_4_4" style=""> 

<div attr-pid="2" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="2"><img src=" " style=" max-width: 100px;"</div></div> 

<div attr-pid="4" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="4"><img src=" " style=" max-width: 100px;"></div></div> 

</div> 

Я это

aProvider = $(".bbb_prov"); 

if (me.savedJSON.providersToVisit == undefined) 
{ 
    me.savedJSON.providersToVisit = []; 
} 

for(var y = 0 ; y < aProvider.length ; y++) 
{ 
    me.savedJSON.providersToVisit.push("&bxb_provider_id="+$(aProvider[y]).attr('attr-pid')); 
} 

CEF_SaveDataJSON(me.savedJSON); 

console.log(JSON.stringify(me.savedJSON, null, 2)); 

Это работает на моей другой DIV, где у меня есть только один класс, но здесь, где его несколько, console.log просто показывает мне:

"providersToVisit": [] 
+0

'aProvider' - это коллекция jquery. Я не уверен, что вы можете получить к ним доступ с использованием нотации массива. – bassxzero

+0

@Santi, когда вы используете '[]' accessor на объекте jQuery, он будет основным объектом, поэтому в этом случае это будет фактический элемент DOM. Хотя они могли бы использовать ['.eq (y)'] (http://api.jquery.com/eq/) вместо этого, чтобы получить обернутый элемент jQuery в этой позиции или просто использовать ['.each()'] (http://api.jquery.com/each/) для прокрутки коллекции. –

+0

Да, ты прав Патрик, я только что отредактировал свой комментарий. Я вошел в JSFiddle, чтобы исследовать мои подозрения и нашел то же самое! Благодарю. – Santi

ответ

0

код работает, как это предусмотрено (см эту скрипку: https://jsfiddle.net/ta3sgh8e/)

HTML

<div class="prod-col et_pb_column et_pb_column_4_4" style=""> 
<div attr-pid="2" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="2"><img src=" " style=" max-width: 100px;"></div></div> 
<div attr-pid="4" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="4"><img src=" " style=" max-width: 100px;"></div></div> 
</div> 

JS

function CEF_SaveDataJSON(data){ 
    //What happens in this function? 
    //data.providersToVisit = []; 
} 
me = {savedJSON:{}}; 
aProvider = $(".bbb_prov"); 
if (me.savedJSON.providersToVisit == undefined) 
{ 
    me.savedJSON.providersToVisit = []; 
} 
for(var y = 0 ; y < aProvider.length ; y++) 
{ 
    me.savedJSON.providersToVisit.push("&bxb_provider_id="+$(aProvider[y]).attr('attr-pid')); 
} 
CEF_SaveDataJSON(me.savedJSON); 
console.log(JSON.stringify(me.savedJSON, null, 2)); 

Мое подозрение в том, что данные изменены внутри функции CEF_SaveDataJSON до вашего журнала консоли, если нет других махинаций мы не можем увидеть, которые вы исключили из вашего примера.

0

Fiddle http://jsbin.com/kutudogopo/edit?html,js,console

Попробуйте это. Поскольку вы просто перебираете их, вы все равно можете использовать метод JQuery .each для их прокрутки.

HTML:

<div class="prod-col et_pb_column et_pb_column_4_4" style=""> 

<div attr-pid="2" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="2"><img src=" " style=" max-width: 100px;"</div></div> 

<div attr-pid="4" class="bbb_prov product_select et_pb_column et_pb_column_2_4 model_container"> 
<div class="icon" attr-pid="4"><img src=" " style=" max-width: 100px;"></div></div> 

JQuery:

var aProvider = $(".bbb_prov"); 
console.log(aProvider.length); 

$.each(aProvider, function(){ 
    var $this = $(this); 
    console.log($this.attr('attr-pid')); 

}); 
0

Да, это работает так, как будто это так, поэтому я нашел свою ошибку и плохой для того, чтобы не публиковать весь код, я действительно считал, что проблема связана с кодом, который я опубликовал. Поэтому я просто удалил «if url ===»

this.onPageLoad = function() 
{ 
    var url = window.location.href; 
    var aModels; 
    var aProvider; 

    //iphone 
    if (url == "http://blablabla.com/apple/?menuf_id=1") //This is were i screwed up and had to remove it. 
    { 
     aModels = $(".bbb_prov"); 


     if (me.savedJSON.modelsToVisit == undefined) { 
      me.savedJSON.modelsToVisit = []; 
     } 

     if (me.savedJSON.phoneModel == undefined) { 
      me.savedJSON.phoneModel = []; 
     } 

     for(var i = 0 ; i < aModels.length ; i++) 
     { 
      me.savedJSON.modelsToVisit.push("http://blablabla.com/apple/?menuf_id=1&bxb_model_id="+$(aModels[i]).attr('attr-mid')); 
     } 

     for(var x = 0 ; x < aModels.length ; x++) 
     { 
      me.savedJSON.phoneModel.push($(aModels[x]).text()); 
     } 

     CEF_SaveDataJSON(me.savedJSON); 


     me.blablabla_GotoNextModel(); 

     aProvider = $(".bbb_prov"); 

     if (me.savedJSON.providersToVisit == undefined) { 
      me.savedJSON.providersToVisit = []; 
     } 


     for(var y = 0 ; y < aProvider.length ; y++) 
     { 
      me.savedJSON.providersToVisit.push("&bxb_provider_id="+$(aProvider[y]).attr('attr-pid')); 
     } 

     CEF_SaveDataJSON(me.savedJSON); 

     console.log(JSON.stringify(me.savedJSON, null, 3)); 
    } 

}