2017-02-22 8 views
1

Я хочу использовать первую букву и третью букву в своем текстовом поле.Как использовать первую и третью букву?

Я могу использовать только первую букву, а затем все последующие буквы и слова преобразуются в строчные буквы.

Если у вас возникли проблемы с решением проблемы, сообщите мне.

Я использую AngularJS.

Это то, что я пытался и сделал.

link: function (scope, iElement, iAttrs, controller) { 
     //console.log('init'); 

     controller.$parsers.push(function (inputValue) { 
      var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase() + inputValue.substr(1).toLowerCase() : ''; 
         if (transformedInput != inputValue) { 
      controller.$setViewValue(transformedInput); 
      controller.$render(); 
     } 

     return transformedInput; 
    }); 

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

Я попытался изменить свой код на это, но ничего.

var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase() + inputValue.substr(1).toLowerCase() + inputValue.charAt(3).toUpperCase() + inputValue.substr(4).toLowerCase(): ''; 

ответ

2

Посмотрите на это. То же, что вы делаете, просто используя для цикла, чтобы идентифицировать индекс символов для изменения.

var inputValue = "test"; 
 

 
var transformedInput = ''; 
 

 
if(inputValue){ 
 
    for(var i=0; i<inputValue.length; i++){ 
 
    \t if(i===0 || i=== 2){ 
 
\t  transformedInput += inputValue.charAt(i).toUpperCase(); 
 
     } else { 
 
    \t  transformedInput += inputValue.charAt(i).toLowerCase(); 
 
    } 
 
    } 
 
} 
 

 
console.log(transformedInput);

+0

спасибо, человек, отлично! большое спасибо – brithwulf

1

Вот функция, чтобы капитализировать символов в определенных позициях

function capitalizeAtPositions(string, indexes) { 
    (indexes || []).forEach(function(index) { 
    if (string.length < index) return; 

    string = string.slice(0, index) + 
     string.charAt(index).toUpperCase() + string.slice(index+1); 
    }); 
    return string; 
} 

Выполнить это следующим образом:

var test = "abcdefg"; 
var result = capitalizeAtPositions(test, [0, 2]); 
//AbCdefg 

В вашем случае я думаю, что это будет что-то вроде (не может проверить его без jsfiddle):

var transformedInput = capitalizeAtPositions(inputValue || '', [0, 2]); 
+0

может я просто замените этот код на мой? Мне нужно это для ввода версии не для текста. когда я буду вводить что-то, он должен загладить первую букву и, например, третью букву. Я думаю, что это только для текстов, которые не вводятся – brithwulf

+0

@brithwulf yep, вы можете. Если вам нужно изменить текст по мере ввода, вы не сможете сделать это так легко. вам придется либо использовать 'div contenteditable', либо более продвинутое решение, например' CodeMirror', я думаю. – euvl

0

Попробуйте это

var firstUpperCase = inputValue.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 

    var transformedInput = ''; 
     for(i = 0; i < firstUpperCase.length; i++){ 
      if(i > 0 && i % 3 == 0){ 
       transformedInput += firstUpperCase[i].toUpperCase(); 
      }else{ 
       transformedInput += firstUpperCase[i]; 
      } 
     } 
1

Видя, как вам нужно иметь изменение входного сигнала, как вы печатаете, вам, возможно, понадобится директива; вот один капитализировать данные буквы любого входа с нг-модели:

https://plnkr.co/edit/hWhmjQWdrghvsL20l3DE?p=preview

app.directive('myUppercase', function() { 
    return { 
    scope: { 
     positions: '=myUppercase' 
    }, 
    require: 'ngModel', 
    link: function(scope, elem, attrs, ngModelCtrl) { 

     scope.positions = scope.positions || [] 

     function makeString(string) { 
     if (!string) return; 
     angular.forEach(scope.positions, function(pos) { 
      string = string.slice(0, pos) + string.slice(pos, pos+1).toUpperCase() + string.slice(pos + 1) 
      console.log(string) 
     }) 
     return string; 
     } 

     ngModelCtrl.$parsers.push(makeString) 
     ngModelCtrl.$formatters.push(makeString) 
    } 
    } 
}) 

HTML:

<input ng-model="value" my-uppercase="[0, 2]"> 
1

Мой простое решение

var inputValue = 'your value'; 

function toUpper (str) { 
    var result = ''; 
    for (var i = 0; i < str.length; i++) { 
     if (i === 0 || i === 2) { 
      result += str[i].toUpperCase(); 
     } else { 
      result += str[i].toLowerCase(); 
     } 
    } 
    return result; 
} 
var transformedInput = toUpper(inputValue);