2014-01-25 38 views
0

如何檢查所有文檔元素的屬性data,並且如果屬性的內容與數組中的值匹配,請執行下列操作?將數組與文本進行JavaScript比較

我有一個數組,我通過從文本輸入中獲取namevalue屬性來創建。例如,我想比較名稱爲「X」的value與數據屬性爲「X」的span的值。

我目前擁有的代碼是這樣的:

bulletinPreview.prototype.updatePreview = function() { 
    var dataValues = new Array(); 

    $(".edit-bulletin input[type=text]").each(function() { 
     var $this = $(this), 
      dataName = $this.attr("name"), 
      dataValue = $this.attr("value"); 

     dataValues.push({ 
      "name": dataName, 
      "value": dataValue 
     }); 
    }); 

    $(".bulletin-preview .editable").each(function() { 
     var $this = $(this); 

     if ($.inArray($this.data("title"), dataValues.name !== -1)) { 
      $this.text(dataValues[1].value); 
     } 
    }); 
}; 

它替換的title一個data-title第二value(因爲我明確地說dataValues[1]剛剛看到的東西的工作)的所有元素的文本。我如何接受並使之成爲模塊化的,以便它貫穿所有元素,貫穿整個數組,並且如果兩個值匹配,做些什麼?

+0

你的第一步是把')'在'如果($正確的地方。 inArray($ this.data(「title」),dataValues.name!== -1))'(第一個應該在'dataValues.name'之後)。 –

回答

0

我認爲你正在尋找這樣的:

var $preview = $(".bulletin-preview"); 
$.each(dataValues, function(index, entry) { 
    var $edit = $preview.find('.editable[data-title="' + entry.name + '"]'); 
    $edit.text(entry.value); // No-op if no match 
}); 

,它假定的名字沒有包含雙引號。

如果通過$preview重複搜索打擾你,你可以做一個搜索,並讓自己的地圖:

var map = {}; 
$(".bulletin-preview .editable").each(function() { 
    map[this.getAttribute("data-title")] = this; 
}); 
$.each(dataValues, function(index, entry) { 
    var edit = map[entry.name]; 
    if (edit) { 
     $(edit).text(entry.value); 
    } 
}); 
+1

正是我在找的東西。以前沒有用過地圖做過很多工作,但現在很好地分辨出它們是如何工作的。謝謝! –

相關問題