2011-12-13 77 views
0

我將一個配置對象與每個幻燈片的名稱傳遞給一個實例化jQuery工具可滾動的函數。我想要位置欄中的網址與活動標籤ID相匹配。我有它的工作,以便通過名稱中的URL將導航到正確的幻燈片(這是在所提供的代碼的底部),但我試圖讓更新時的幻燈片更改。我知道我需要做什麼來獲得它,但不知道如何做到這一點,就像在問題標題中那樣。將值傳遞給對象並獲取具有該值的屬性。在給定對象屬性值的JavaScript中,我可以找到相應的屬性名稱嗎?

$(function() { 
    Scrollablenav.init({ 
     "#tulips": 0, 
     "#daffodils": 1, 
     "#zebras": 2, 
     "#horseshoes": 3 
    }); 
}); 

Scrollablenav.init = function(config){ 
    var scroller = $(".scrollable").scrollable({ 
     circular: true, 
     onSeek: function (event) { 
      parent.location.hash = function(){ 
      //something that looks at config, sends it the value of the current slide and returns corresponding property name 
      } 
     } 
    }).navigator({ 
      navi: '#slideTabs', 
      naviItem: 'a', 
      activeClass: 'current', 
      history: true 
    }).data('scrollable'); 

    if (!isNaN(config[location.hash])){ 
     scroller.seekTo(config[location.hash], 0); 
    } 
} 
+0

這是你使用配置對象的唯一地方嗎?你爲什麼不把這個鍵/值倒過來,或者像@MikeChristensen所說的那樣把它們移到一個對象中? – Mathletics 2011-12-13 20:55:46

+0

如果多個屬性具有相同的值,該怎麼辦?你想找到第一個匹配的屬性,或者所有的或者...的數組嗎?我想這不會發生與您的示例數據,但仍然... – nnnnnn 2011-12-13 20:57:04

回答

0

你可以改變你的配置格式嗎?換句話說,我們可以這樣做:

$(function() { 
    Scrollablenav.init({ 
     "#tulips": { Key: 'tulips', Index: 0 }, 
     "#daffodils": { Key: 'daffodils', Index: 1 }, 
     "#zebras": { Key: 'zebras', Index: 2 }, 
     "#horseshoes": { Key: 'horseshoes', Index: 3 } 
    }); 
}); 

如果不工作,你可以讓地方的新對象索引映射回鍵:

var keys = { 
    1: 'tulips', 
    2: 'daffodils', 
    3: 'zebras', 
    4: 'horseshoes', 
}; 

UPDATE:

你也可以動態地建立這個配置:

$(function() { 
    var values = ['#tulips', '#daffodils', '#zebras', '#horseshoes']; 
    var config = {}; 

    for(var i = 0; i < values.length; i++) 
    { 
     config[values[i]] = { Index: i, Key: values[i] }; 
    } 

    Scrollablenav.init(config); 
}); 
2

這樣的事情?

function getMyHash(config, value) { 
    for (item in config) { 
    if (config[item] === value) { 
     return item; 
    } 
    } 
}; 

基本上你必須迭代和匹配值;你無法按價值查找。

4

您可以創建自己的功能找物業名稱根據其值:

function findPropertyName(object, property_value, strict) { 
    if (typeof strict=='undefined'){ 
     strict = false; 
    }; 
    for (property in object){ 
     if ((strict && object[property] === property_value) || 
      (!strict && object[property] == property_value)){ 
      return property; 
     } 
    } 
    return false; 
} 

功能描述:

  • 它會返回第一個屬性的名稱已經給定值,或者false如果沒有這樣的物業已被發現。
  • 第三參數是負責確定嚴格比較是否應作出(例如字符串「123」等於整數123 - 像在'123'==123,但不是嚴格等於 - 樣'123'===123)。
  • 功能可以改進,以返回所有具有給定值的屬性,但我認爲你不需要它。

要檢查功能,請參閱this jsfiddle

相關問題