JQuery - заменить пробелы во всех именах опций - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть возвращаемая строка JSON, которую я проанализировал и передал в массив, а затем отформатировал, чтобы поместить в выпадающий список выбора:

   function populateGroups(){
        var categories = '';
        for( category in gCategories ){
            categories += '<option name="' + gCategories[category] + '">' + gCategories[category] + '</option>';
            categories.replace(' ', '_');
        }
        $('select[name="category"]').html(categories);    
    }

У меня проблема в том, что имена опций (которыесовпадают со значениями) содержат пробелы, которые мне нужно заменить на что-то, что было бы допустимо, например, подчеркивание '_'.

Вот почему я попытался сделать category.replace ('','_');Я также пытался сделать это с помощью регулярных выражений, хотя мой RegEx не очень хорош: P

Любые идеи о том, как это будет сделано?

Спасибо!

[Примечание]Вот JSFiddle: http://jsfiddle.net/pKYr4/

Ответы [ 4 ]

4 голосов
/ 03 февраля 2012

Если вы передаете строку в replace, она заменяет только первое вхождение.

Вы должны использовать .replace(/ /g, '_') вместо. Флаг g для глобального.

И я думаю, вы не хотите запускать это в строке разметки, а только для категории, иначе у вас будет <option_name=...

Может быть что-то вроде:

    for (category in gCategories ) {
        var noSpaceCategory = gCategories[category].replace(/ /g, '_');
        categories += '<option name="' + noSpaceCategory + '">' + gCategories[category] + '</option>';
    }
1 голос
/ 03 февраля 2012

Вы также должны обновить строку;

categories = categories.replace(/ /g, '_');

... проблема, однако, в том, что не только значения форматируются / обрезаются, поскольку на <option name="... также влияют.

<option_name="category_value">category_value</option>

Это можно решить таким образом;

function populateGroups() {
    var categories = '';
    for( c in gCategories ) {
        var categoryValue = gCategories[c].replace(/ /g, '_');
        categories += '<option name="' + categoryValue + '">' + gCategories[c] + '</option>';
    }
    $('select[name="category"]').html(categories);    
}
1 голос
/ 03 февраля 2012

Может быть, что-то вроде этого:

function replaceAll(txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);
}

, который можно назвать так:

replaceAll('1,000,000', ',', '')

может работать ...

1 голос
/ 03 февраля 2012

Вы можете использовать обрезку javascript для удаления пробелов, см .: http://blog.stevenlevithan.com/archives/faster-trim-javascript. Если вы хотите заменить их на тире:

var str = gCategories[category];

str.replace(/\s+/g, '-');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...