Конвертировать строку в заглавный регистр с помощью JavaScript

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

var element_offset_x ; // The distance from the left side of the element to the left of the content area


....// some code here (function declaration or element lookup )



element_offset_x = element.getBoundingClientRect().left  -  document.getElementsByTagName("html")[0].getBoundingClientRect().left  ;

....// code here 




function mouseMoveEvent(event) 
{
   var pointer_location = (event.clientX + window.pageXOffset) - element_offset_x ; 
}

Как это работает.

Первое, что мы делаем, это получить расположение элемента HTML (области содержимого) относительно текущего видовой экран. Если на странице есть полосы прокрутки и прокручивается, число, возвращаемое getBoundingClientRect().left для тега html, будет отрицательным. Затем мы используем это число для вычисления расстояния между элементом и левой частью области содержимого. С помощью element_offset_x = element.getBoundingClientRect().left......;

Знание расстояния элемента от области содержимого. event.clientX дает нам расстояние от указателя из окна просмотра. Важно понимать, что область просмотра и область содержимого являются двумя разными объектами, просмотр может перемещаться, если страница прокручивается. Следовательно, clientX вернет ТОЛЬКО номер, даже если прокручивается страница.

Чтобы компенсировать это, нам нужно добавить позицию x указателя (относительно окна просмотра) в положение x окна просмотра (относительно области содержимого). Положение X окна просмотра находится с помощью window.pageXOffset.

486
задан Michael 1 August 2018 в 22:55
поделиться

7 ответов

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

    function toTitleCase(str) {
        return str.replace(
            /\w\S*/g,
            function(txt) {
                return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
            }
        );
    }
<form>
Input:
<br /><textarea name="input" onchange="form.output.value=toTitleCase(this.value)"  onkeyup="form.output.value=toTitleCase(this.value)"></textarea>
<br />Output:
<br /><textarea name="output" readonly onclick="select(this)"></textarea>
</form>
684
ответ дан LWC 1 August 2018 в 22:55
поделиться
var toMatch = "john w. smith";
var result = toMatch.replace(/(\w)(\w*)/g, function (_, i, r) {
      return i.toUpperCase() + (r != null ? r : "");
    }
)

, Кажется, работает... Протестированный с вышеупомянутым, "быстро-коричневый, лиса?/jumps/^over^ ВЎlazy! собака..." и "поставщик/их файлов/некоторых C:/program 2-й application/a file1.txt".

, Если Вы хотите 2-й вместо 2-го, можно измениться на /([a-z])(\w*)/g.

первая форма может быть упрощена как:

function toTitleCase(toTransform) {
  return toTransform.replace(/\b([a-z])/g, function (_, initial) {
      return initial.toUpperCase();
  });
}
7
ответ дан PhiLho 1 August 2018 в 22:55
поделиться

Импортируйте loadash как это import * as _ from 'lodash';

, Вызов startCase функционирует и передает Вашу строку как это _.startCase("john smith");

Вывод: John Smith

-2
ответ дан Abhishek Kumar 29 August 2019 в 18:11
поделиться

Если поля не существуют в новом представлении, можно просто проверить, является ли оно новым ( new _ record? ), и представить другой набор полей (если перейти к частичному в может быть вполне чистым подходом).

-121--3338973-

Ваш вызов

Mage::getSingleton('sales/order')

не возвращает объект. Попробуйте

var_dump(Mage::getSingleton('sales/order'));

подтвердить.

Я не погружался в код оформления заказа недавно, но я почти уверен, что это потому, что продажи/заказ позволят вам выполнить заказ. После размещения заказа он больше не выполняется.

"Правильным" способом сделать это было бы создать наблюдателя для одного из событий, которые Magento возбуждает во время оформления заказа. События

checkout_onepage_controller_success_action

должно быть достаточно, если вы не сделали слишком много настройки процесса оформления заказа.

Существует четкое объяснение того, как это сделать на вики (для другого события)

После настройки события и ответа на него, сделайте

$event = $observer->getEvent();
var_dump($event->getData());

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

-121--1725338-

Я создал эту функцию, которая может обрабатывать фамилии (так что это не титульный регистр), такие как "Макдональд" или "Макдональд" или "О 'Тул" или "Д' Орацио". Однако он не рассматривает немецкие или голландские имена с "ван" или "фон", которые часто находятся в нижнем регистре... Я считаю, что "de" часто слишком низший случай, как "Robert de Niro". Эти вопросы еще предстоит рассмотреть.

function toProperCase(s)
{
  return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
          function($1, $2, $3, $4, $5) { if($2){return $3.toUpperCase()+$4+$5.toUpperCase();} return $1.toUpperCase(); });
}
8
ответ дан 22 November 2019 в 22:33
поделиться

Попробуйте применить стиль CSS text-transform к своим элементам управления.

например: (text-transform: capitalize);

Используйте JS-подход только тогда, когда это абсолютно необходимо.

160
ответ дан 22 November 2019 в 22:33
поделиться

Мое одно решение для строки:

String.prototype.capitalizeWords = function() {
    return this.split(" ").map(function(ele){ return ele[0].toUpperCase() + ele.slice(1).toLowerCase();}).join(" ");
};

Затем можно назвать метод capitalizeWords() на любой строке. Например:

var myS = "this actually works!";
myS.capitalizeWords();

>>> This Actually Works

Мое другое решение:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeAllWords = function() {
    var arr = this.split(" ");
    for(var i = 0; i < arr.length; i++) {
        arr[i] = capitalizeFirstLetter(arr[i]);
    }
    return arr.join(" ");
};

Затем можно назвать метод capitalizeWords() на любой строке. Например:

var myStr = "this one works too!";
myStr.capitalizeWords();

>>> This One Works Too

Альтернативное решение на основе ответа Greg Dean:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeWords = function() {
    return this.replace(/\w\S*/g, capitalizeFirstLetter);
};

Затем можно назвать метод capitalizeWords() на любой строке. Например:

var myString = "yes and no";
myString.capitalizeWords()

>>> Yes And No
2
ответ дан 22 November 2019 в 22:33
поделиться

Решение с помощью lodash -

import { words, lowerCase, capitalize, endsWith, padEnd } from 'lodash';
const titleCase = string =>
  padEnd(
    words(string, /[^ ]+/g)
      .map(lowerCase)
      .map(capitalize)
      .join(' '),
    string.length,
  );
0
ответ дан 22 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: