Сравните значения и добавьте класс ошибки к словам, которые не совпадают

#javascript #jquery #compare #comparison

#javascript #jquery #Сравнить #сравнение

Вопрос:

Я сравниваю два значения с помощью javascript / jQuery. Одно значение — это атрибут данных, а другое — то, что вводит пользователь. Я хочу, чтобы скрипт находил слово в пользовательском значении, которое не соответствует слову в атрибуте данных. Я могу добавить класс ко всему элементу .text, но я не знаю, как добавить класс к словам… Должен ли я разделить эти значения?

Вот мой HTML-код

 <div id="compare-text">
  <div class="row"><span>1.</span><p class="text" data-for="Some sample text" spellcheck="false" contenteditable="true"></p></div>
  <div class="row"><span>2.</span><p class="text" data-for="Some sample text" spellcheck="false" contenteditable="true"></p></div>
  <div class="row"><span>3.</span><p class="text" data-for="Some sample text" spellcheck="false" contenteditable="true"></p></div>
</div>
  

Вот мой скрипт

 $('#check').click(function () {
var controlNumber = 1;
$('.text').each(function () {
  var value = $(this).attr('data-for'),
    userValue = $(this).text();
  value = value.toLowerCase();
  userValue = userValue.toLowerCase();
  if (userValue === '') {
    $(this).addClass('error');
    $(this).removeClass('success');
    controlNumber = 0;
  } else if (value !== userValue amp;amp; userValue !== '') {
    $(this).addClass('error');
    $(this).removeClass('success');
    controlNumber = 0;
  } else if (value === userValue) {
    $(this).addClass('success');
    $(this).removeClass('error');
  } else {
    controlNumber = 1;
  }
});
if (controlNumber === 1) {
  $('#success-message').addClass('visible');
}
  

});

Ответ №1:

Если вы хотите проверить, соответствуют ли введенные данные data-for значению атрибутов, вы можете сделать это:

 $(".test").keydown(function(){
    var data = $(this).attr('data-for').split(" "),
        text = this.value.split(0);
    $(this).addClass("success");
    $(this).removeClass("error");
    for (var i = text.length; i--;) for (var j = data.length; j--;) {
        if (data[j] === text[i])  {
            $(this).addClass("error");
            $(this).removeClass("success");
    }
}) 
  

Измените test элементы на входные данные, такие как:

<input/> или <textarea></textarea>

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

1. Должен ли я вставить этот код в функцию #check click?

2. @user3043693 ИМО, вы никогда не должны вставлять код, который вы не понимаете… в чем вы сомневаетесь?