Я пытаюсь создать массив из переменной window.location.hash, но я падаю.

Мой код:

        $.each(window.location.hash.replace("#", "").split("&"), function (i, value) {
            value = value.split("=");

            var my_item = {value[0] : value[1]};
            form_data[i] = my_item; 
        });
        console.log(form_data);

Спасибо.

5
mTuran 13 Июл 2010 в 08:06

7 ответов

Лучший ответ
your code is correct only error is

 $.each(window.location.hash.replace("#", "").split("&"), function (i, value) {
            value = value.split("=");
            var _formItem={};
            var my_item={};
            my_item[value[0]]= value[1]; 
            form_data[i] = my_item; 
        });
2
Praveen Prasad 30 Сен 2010 в 16:04

Чтобы получить ассоциативный массив из хеша URL:

function readUrlHashParams() {
    var result = {};
    var hashParam = window.location.hash.substring(1);
    var params = hashParam.split("&");

    $.each(params, function (index, set) {
        var paramSet = set.split("=");
        if (typeof (paramSet[1]) !== "undefined") {
            result[paramSet[0]] = decodeURIComponent(paramSet[1]);
        } else {
            result[paramSet[0]] = "";
        }
    });
    return result;
}

Пример URL

http: //localhost/Index.html#Param1=test1&Param2=Test2&Param3=

Результат

var test = readUrlHashParams();
console.log(test);

Объект {Param1: "test1", Param2: "Test2", Param3: ""}

0
Femaq 1 Июл 2016 в 12:50

Совершенный объект.

location.hash = location.hash ? location.hash : "#!";
$.each((location.hash ? location.hash.split("#!") : [""])[1].split("&"), (function () {
 y = this.split("=");
 $hash[y[0]] = y[1];
}));

Если вы еще не используете #! Вы можете изменить его на #

0
JamesM-SiteGen 1 Окт 2010 в 05:40

Вот пример, основанный на следующем URL:

http://www.someUrl.com/Index.htm#foo = bob & moo = alice

<!DOCTYPE html>
<html lang="en">
<head>
    <title>hash me long time</title>
</head>
<body>

    <p>Hello World!</p>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript">

        $(function () {

            var hash = window.location.hash.replace('#', '').split('&');
            var myArray = new Array();
            for (var x = 0; x < hash.length; x++) {
                var itemArray = hash[x].split('=');
                var item = new Object();
                item.key = itemArray[0];
                item.value = itemArray[1];
                myArray.push(item);
            }

            for (var x = 0; x < myArray.length; x++)
                console.log(myArray[x].key + ' is ' + myArray[x].value);

        });

    </script>
</body>
</html>
0
a7drew 13 Июл 2010 в 04:36

Необъявленный form_data не является объектом, поэтому он не может иметь никаких свойств, поэтому form_data[i] = ... завершится ошибкой. Запустите этот скрипт в приличном браузере, и консоль должна показать вам сообщение, равное тому, что я только что сказал.

Отредактируйте - нет, потому что буквальный синтаксис фиктивного объекта сначала сработает, как упоминает Коби. Обе проблемы должны быть исправлены.

0
Dagg Nabbit 13 Июл 2010 в 04:19

JavaScript не поддерживает следующие обозначения:

var my_item = {value[0] : value[1]};

Попробуйте вместо этого:

var my_item = {};
my_item[value[0]] = value[1];

Это создаст массив, где каждый элемент имеет ключ и значение, например:

[{name: jason}, {age: 23}, {location: pacific}] //array of single keys

Использование хеша, вероятно, создает больше сцены в вашем случае, поэтому вы можете вызвать form_data['age'], и вам не нужно будет просматривать массив:

Инициализировать form_data для объекта:

form_data = {};

Добавьте ключи непосредственно к нему:

form_data[value[0]] = value[1];

Итак, результат:

{name: jason, age: 23, location: pacific} //associative array with properties
2
Kobi 13 Июл 2010 в 05:04

Дайте это попробовать:

var hash = window.location.hash.slice(1);
var array = hash.split("&");

var values, form_data = {};

for (var i = 0; i < array.length; i += 1) {
    values = array[i].split("=");
    form_data[values[0]] = values[1];
}

console.log(form_data);

... Конечно, я подозреваю, что вам может потребоваться свойство поиска, а не хеш, но я не знаю вашего конкретного случая использования.

5
Pauan 30 Сен 2010 в 15:42