JSFiddle - React, Tailwind, and code Playground

by paska

HTML

<input type="text" />

JavaScript

//Plugin -->
(function ($) {

    $.fn.datePickerPlugin = function (options) {

        //Opciones por defecto.
        options = $.extend({
            format: "dd/mm/yyyy", //Formato de la fecha. Solo puede tener "dd", "mm", "yyyy" y separadores o carcteres que no van a ser interpretados
            textOnBlur: "dd/mm/yyyy" //Texto para poner en el blur si todavia no se ingreso nada
        }, options);

        //Referencias
        var _this = $(this),
        //Otras variables
            maxValues = {
                "dd": 31,
                "mm": 12,
                "yyyy": 9999
            },
            textToComplete = options.format.replace(/(dd|mm|yy)/g, "__"),
            posCursor = 0,
            waitingKeyUp = 0,
            seleccionarValor = function (saltearCaracteres, alreves) {
                //Selecciono el primer grupo de guiones
                saltearCaracteres = (!saltearCaracteres) ? 0 : saltearCaracteres;
                alreves = (!alreves) ? false : alreves;

                var text = _this.val();
                if (alreves) {
                    var finalText = "";
                    for (i = 0; i <= text.length; i++)
                        finalText = text.substring(i, i + 1) + finalText;
                    text = finalText;
                    saltearCaracteres = text.length - saltearCaracteres;
                }

                if (text.length == saltearCaracteres)
                    return;
                var start = saltearCaracteres + text.substr(saltearCaracteres).search(/(_|[0-9])+/g),
                    end = start + 1;

                while (text.substr(end).search(/(_|[0-9])+/g) == 0)
                    end++;

                if (alreves) {
                    var aux = text.length - end;
                    end = text.length - start;
                    start = aux;
                }

                _this.selectText(start, end);
            },
            obtenerVariableActual = function () {
             ...