упорядочить дополнение input-group на основе входного значения в bootstrap 3

#javascript #jquery #html #twitter-bootstrap #twitter-bootstrap-3

#javascript #jquery #HTML #twitter-bootstrap #twitter-bootstrap-3

Вопрос:

Рассмотрим следующий фрагмент HTML:

 <div class="input-group">
    <div class="form-group">
        <div class="controls">
            Rank: <input class="form-control" name="myrank" id="myrank" type="number" value="1">
        </div>
    </div> <span class="input-group-addon">st</span>

</div>
  

Здесь я хочу, чтобы мой ранг отображался как 1-й, 2-й, 3-й, 4-й и так далее. поэтому я хотел бы обновить span.input-group-addon html-код на основе значения из #myrank . пока я могу обнаружить изменение и получить значение следующим образом:

 function ordinal(n) {
   var s=["th","st","nd","rd"],
       v=n%100;
   return n (s[(v-20)%10]||s[v]||s[0]);
}


$(function (){
  $('input[type="number"]').on('input', function(e) {
    var rank_ordinal = ordinal(this.value);
    //how do I get to the sibling span from instance of 'this'?
    // something like this $(this).parent().parent().parent().next()?
  });
});
  

По сути, я ищу селектор для обхода DOM, чтобы я мог перейти к span.input-group-addon this нему, поскольку страница может иметь несколько входных данных, поэтому я хочу обновить значение, в котором пользователь внес изменения. какие-либо указатели?

Комментарии:

1. я data-role нигде не вижу в html..

2. Исправлено удаление html data-role и использование обычного селектора ввода.

Ответ №1:

Вы можете получить этот диапазон с помощью,

  $('input[type="number"]').on('input', function(e) {
    var rank_ordinal = ordinal(this.value);
    var $span= $(this).closest('div.form-group').next('span.input-group-addon');
  });
  

ДЕМОНСТРАЦИЯ