2011-11-18 8 views
5

मेरे पास 3 भिन्नताएं हैं जिनमें कॉमा से अलग मूल्य शामिल हैं (मुझे नहीं पता कि कितने) जिन्हें मैं jQuery ऑब्जेक्ट्स में जोड़ना चाहता हूं।कॉमा से अलग मूल्य: स्ट्रिंग्स से ऑब्जेक्ट्स तक सूची

"name1,name2,name3,nameN" 
"value1,value2,value3,valueN" 
"id1,id2,id3,idN" 
को

:

var item1 = { name: name1, value: value1, id: id1 }; 
var item2 = { name: name2, value: value2, id: id2 }; 
var item3 = { name: name3, value: value3, id: id3 }; 
var itemN = { name: nameN, value: valueN, id: idN }; 

तो उदाहरण के लिए प्रत्येक आइटम के ऊपर एक ऑपरेशन पुनरावृति करने के लिए, एक सूची संलग्न करने के लिए:

<h3>items</h3> 
<ul> 
    <li>item1</li> 
     <ul> 
      <li>value: <b>value1</b></li> 
      <li>id: <b>id1</b></li> 
     </ul> 

    [...] 

    <li>itemN</li> 
     <ul> 
      <li>value: <b>valueN</b></li> 
      <li>id: <b>idN</b></li> 
     </ul> 
<ul> 

यह करने के लिए सबसे अच्छा तरीका क्या है?

+0

आप कहां फंस गए हैं? – heneryville

+0

बहुत शुरुआत में, वास्तव में। मुझे पता है कि मैं विभाजन का उपयोग कर सकता हूं, लेकिन फिर मैं खुद को उसी प्रकार के मानों को संयोजित करने वाले सरणी के साथ ढूंढता हूं ... –

उत्तर

11

आप इस तरह अपने आइटम की एक सरणी का निर्माण कर सकते हैं:

var names = "name1,name2,name3,nameN"; 
var values = "value1,value2,value3,valueN"; 
var ids = "id1,id2,id3,idN"; 

var namesArray = names.split(","); 
var valuesArray = values.split(","); 
var idsArray = ids.split(","); 

var item, items = []; 
for (var i = 0; i < namesArray.length; i++) { 
    item = {}; 
    item.name = namesArray[i]; 
    item.value = valuesArray[i]; 
    item.id = idsArray[i]; 
    items.push(item); 
} 

फिर, उस से HTML निर्माण करने के लिए, आप यह कर सकते हैं:

var main = $("<ul>"); 
var str = ""; 
for (var i = 0; i < items.length; i++) { 
    str += "<li>" + items[i].name + "</li><ul><li>value: <b>" + items[i].value + "</b></li>"; 
    str += "<li>id: <b>" + items[i].id + "</b></li></ul>"; 
} 
main.html(str); 
$(document.body).append("<h3>items</h3>") 
$(document.body).append(main); 

आप इसे यहाँ काम देख सकते हैं: http://jsfiddle.net/jfriend00/yWU3L/4/

+0

मैंने HTML भाग जोड़ा। – jfriend00

+0

मैंने अभी कोशिश की। "Var आइटम, आइटम = [];" हिस्सा काम नहीं कर रहा था। मैं दो लाइनों में विभाजित हूं लेकिन मैं एक और समस्या के साथ समाप्त होता हूं: सूची में हर मूल्य अब "nameN, valueN, idN" है। मैं तुरंत उदाहरण पोस्ट करूंगा। –

+0

मैंने कोड में एक सुधार किया है और यह यहां काम कर रहा है: http://jsfiddle.net/jfriend00/yWU3L/4/। – jfriend00

1

आप इसके लिए डीओएम का उपयोग करना चाह सकते हैं।

innerHTML का उपयोग करना आपके जावास्क्रिप्ट में इन-लाइन HTML होना है। यह Seperations of concerns तोड़ता है और रखरखाव नरक की ओर जाता है।

Live Example

var createListFragment = (function() { 
    function createItems(names,value,ids) { 
     var namesArray = names.split(","); 
     var valuesArray = value.split(","); 
     var idsArray = ids.split(","); 

     return namesArray.map(function (name, key) { 
      return { 
       name: name, 
       value: valuesArray[key], 
       id: idsArray[key] 
      } 
     });   
    } 

    function createLi(item) { 
     var itemLi = document.createElement("li"); 
     itemLi.textContent = item.name; 

     var propertiesUl = document.createElement("ul"); 
     itemLi.appendChild(propertiesUl); 

     var valueLi = document.createElement("li"); 
     valueLi.appendChild(document.createTextNode("value: ")); 
     var b = document.createElement("b"); 
     b.textContent = item.value; 
     valueLi.appendChild(b); 
     propertiesUl.appendChild(valueLi); 

     var idLi = document.createElement("li"); 
     idLi.appendChild(document.createTextNode("id: ")); 
     var b = document.createElement("b"); 
     b.textContent = item.id; 
     idLi.appendChild(b); 
     propertiesUl.appendChild(idLi); 

     return itemLi; 
    } 

    function createListFragment(names, values, ids) { 
     var items = createItems(names, values, ids); 
     var fragment = document.createDocumentFragment(); 

     var h3 = document.createElement("h3"); 
     h3.textContent = "items"; 
     fragment.appendChild(h3); 

     var ul = document.createElement("ul"); 
     fragment.appendChild(ul); 

     items.forEach(function (item) { 
      var li = createLi(item); 
      ul.appendChild(li); 
     }); 

     return fragment; 
    } 

    return createListFragment; 
})(); 

आप एक DOM-shim और ES5-shim पार ब्राउज़र अनुपालन के लिए आवश्यकता हो सकती है।

+0

इस कोड में आंतरिक HTML उदाहरण की तुलना में चिंता का कोई अलग अलगाव नहीं है। किसी भी मामले में, आप जावास्क्रिप्ट के माध्यम से एचटीएमएल बना रहे हैं इसलिए चिंता का कोई अलगाव नहीं है। मुझे यह जानना अच्छा लगेगा कि आपको लगता है कि यह कोड आंतरिक HTML संस्करण की तुलना में अधिक रखरखाव क्यों है? आंतरिक HTML संस्करण में, यह देखने के लिए छोटा है कि HTML क्या बनाया जा रहा है। आपके संस्करण में, आपको यह पता लगाने के लिए कोड को रिवर्स-इंजीनियर करना होगा कि वास्तव में HTML क्या बनाया जा रहा है। – jfriend00

+0

एफवाईआई, आपका एचटीएमएल सृजन कोड आंतरिक HTML संस्करण के लिए 31 लाइन बनाम 8 लाइनें है। लंबाई भलाई का एक उपाय नहीं है, लेकिन इस मामले में, यह सादगी से संबंधित है। आपका कोड बस बहुत जटिल है और क्रॉस-ब्राउज़र संगतता के लिए ES5 शिम की आवश्यकता है। यह उत्तर किसी के लिए जावास्क्रिप्ट अनुभव के बिना किसी के लिए डिज़ाइन किया गया था। आपको कौन सा जवाब लगता है कि उन्हें समझने में आसान, कार्यान्वित करने में आसान और बनाए रखने में आसान लगेगा? – jfriend00

+0

मुझे जोड़ना चाहिए (अन्य पाठकों के लाभ के लिए) कि यह वार्तालाप इस उत्तर में क्या हो रहा है उससे संबंधित है: http://stackoverflow.com/questions/8190024/is-innerhtml-still-cononsidered-to-be-evil -और-क्यों/8190182 # 8190182। – jfriend00

संबंधित मुद्दे