В JavaScript, учитывая значение свойства объекта, могу ли я найти соответствующее имя свойства? - PullRequest
0 голосов
/ 14 декабря 2011

Я передаю объект конфигурации с именами для каждого слайда в функцию, которая создает прокручиваемые инструменты jQuery.Я хочу, чтобы URL в адресной строке совпадал с идентификатором активной вкладки.У меня это работает так, что передача URL с именем в будет переходить к правильному слайду (это внизу предоставленного кода), но я пытаюсь обновить URL при изменении слайда.Я знаю, что мне нужно сделать, чтобы получить это, но не знаю, как это сделать, как в заголовке вопроса ... передать значение объекту и получить свойство, которое имеет это значение.

$(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);
     }
}

Ответы [ 3 ]

4 голосов
/ 14 декабря 2011

Вы можете создать собственную функцию , чтобы найти имя свойства по его значению:

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 .

2 голосов
/ 14 декабря 2011

Как то так?

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

в основном вы должны повторять и сопоставлять значения; вы не можете искать по значению.

0 голосов
/ 14 декабря 2011

Можете ли вы изменить формат вашей конфигурации? Другими словами, можем ли мы сделать:

$(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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...