Этот скрипт преобразует первую букву каждого слова в заглавные буквы, за исключением некоторых слов, которые являются частью массивов в переменных wordContainAt
, wordsToIgnore
, wordUpperCase
.
I'm возникли проблемы с рефакторингом кода, сделанного с jQuery
до Vannila JS
, с использованием ES6 export
.
Я думаю, что я не очень хорошо понял эту концепцию, кроме того, что не смог получить объект this
в рамках функции.
Может ли кто-нибудь мне помочь?
jQuery
$(window).on('load', function() {
$.fn.capitalize = function() {
// words to ignore
let wordContainAt = '@',
wordsToIgnore = ['to', 'and', 'the', 'it', 'or', 'that', 'this'],
wordUpperCase = ['S.A', 'SMS', 'USA'],
minLength = 2;
function getWords(str) {
if (str == undefined) {
str = 'abc def';
} else {
str = str;
}
return str.match(/\S+\s*/g);
}
this.each(function() {
let words = getWords(this.value);
console.log(words);
$.each(words, function(i, word) {
// only continues if the word is not in the ignore list or contains at '@'
if (word.indexOf(wordContainAt) != -1) {
words[i] = words[i].toLowerCase();
} else if (wordUpperCase.indexOf($.trim(word).toUpperCase()) != -1) {
words[i] = words[i].toUpperCase();
} else if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) {
words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1).toLowerCase();
} else {
words[i] = words[i].toLowerCase();
}
});
if (this.value != '') {
this.value = words.join('');
}
});
};
// field onblur with class .lower
$(document).on('blur', '.lower', function() {
$(this).capitalize();
}).capitalize();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="lower" />
Vannila JS Пример синтаксиса
const capitalizeTheWord = () => {
console.log('hello World');
const inputWordCapitalize = document.querySelector('input.lower');
inputWordCapitalize.addEventListener('blur', (e) => {
//
});
};
export default capitalizeTheWord();