Comment regrouper le texte tapé dans un tableau et envelopper tous les 20 caractères dans un div


Jonny

J'essaie d'envelopper tous les 20 caractères dans un nouveau conteneur div. Je continue à être indéfini, je suppose à partir des résultats du tableau qui n'existent pas encore. Comment puis-je envelopper tous les 20 caractères lorsque l'utilisateur tape et atteint les caractères 20, 40, 60 et 80 et le place dans un conteneur div avec le maximum de caractères autorisés étant de 80, et y a-t-il un meilleur moyen de le faire que d'écrire le groupes de tableaux manuellement par 20.

function creaeTextField(clicked_id) {
  var dropArea = document.getElementById('headarea');
  var myArea = document.createElement('div');
  var myAreaOuter = document.createElement('div');

  myArea.className = "areaClass";
  myAreaOuter.className = "areaClassOuter";

  myArea.id = "areaClass";
  myAreaOuter.id = "areaClassOuter";

  myArea.contentEditable = "true";

  if (clicked_id == 'text') {
    myAreaOuter.appendChild(myArea);
    dropArea.appendChild(myAreaOuter);

    myArea.addEventListener("keydown", findLimitb);
    myArea.addEventListener("keyup", findLimitb);

    var style = window.getComputedStyle(myArea, null).getPropertyValue('font-size');
    var fontSize = parseFloat(style);

    function findLimitb() {
      if (myArea.offsetHeight <= fontSize * 4) {
        myArea.addEventListener("keydown", breaker);
      } else {
        if (event.keyCode === 8 || event.keyCode === 46 || event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 39 || event.keyCode === 40) {
          myArea.focus();
        } else {
          myArea.removeEventListener("keydown", breaker);
          event.preventDefault();
          myArea.style.height = fontSize * 4 + "px";
        }
      }
    }

    function breaker() {
      var myAr = myArea.innerHTML.split("");
      var divCon = document.createElement('div');
      myArea.appendChild(divCon);
      if (myArea.innerHTML.length > 20) {
        divCon.innerHTML = myAr[0] + myAr[1] + myAr[2] + myAr[3] + myAr[4] + myAr[5] + myAr[6] + myAr[7] + myAr[8] + myAr[9] + myAr[10] + myAr[11] + myAr[12] + myAr[13] + myAr[14] + myAr[15] + myAr[16] + myAr[17] + myAr[18] + myAr[19] + myAr[20];
      }
    }

  }
}
.headarea {
  width: 100%;
  height: 130px;
  float: left;
}

.buttonStyle {
  width: 60px;
  height: 25px;
  float: left;
}

.areaClassOuter {
  float: left;
  padding: 10px;
  position: relative;
  z-index: 29;
  border: 1px #000000 solid;
}

.areaClass {
  min-width: 100px;
  max-width: 310px;
  min-height: 60px;
  max-height: 100px;
  float: left;
  padding: 7px;
  position: relative;
  z-index: 30;
  border: 1px #000000 solid;
  overflow: hidden;
  white-space: pre-wrap;
  word-wrap: break-word;
  font-size: 24pt;
  text-align: center;
}
<div class="headarea" id="headarea"></div>
<button class="buttonStyle" id="text" type="button" onclick="creaeTextField(this.id)"></button>

Jan

Vous pouvez simplement écouter l' keydownévénement - comme vous l'avez fait dans votre question, puis travailler avec substringpour obtenir et supprimer la première partie de la chaîne. La première partie peut ensuite être ajoutée à un conteneur et le reste de la chaîne (dans la plupart des cas, seulement 1 caractère) peut être défini comme contenu de l'élément d'entrée.

vous devriez également envisager d'utiliser à la textContentplace de innerHtml, afin que l'utilisateur puisse saisir en toute sécurité les caractères utilisés par html.

let textOutput = document.getElementById('textOutput');
let textInput = document.getElementById('textInput');
let maxInputLength = 20;
let maxOutputElement = 4; // 4*20 = 80 Chars

textInput.addEventListener('keydown', function(event) {
  if (textOutput.children.length >= maxOutputElement) {
    event.preventDefault();
    textInput.textContent = '';
  }
  let textChanged = false;
  let text = textInput.textContent;
  while (text.length >= maxInputLength) {
    let firstPart = text.substring(0, maxInputLength);
    let textElement = document.createElement('div');
    textElement.textContent = firstPart;
    textElement.contentEditable = true;
    textElement.addEventListener('keyup', function(event) {
      let editText = event.currentTarget.textContent;
      if (editText.length >= maxInputLength) {
        event.currentTarget.textContent = editText.substring(0, maxInputLength);
      }
    });
    textOutput.appendChild(textElement);
    text = text.substring(maxInputLength);
    textChanged = true;
  }
  if (textChanged) textInput.textContent = text;
});
#textOutput div {
  display: inline-block;
  margin: 5px;
  background-color: #EEE;
}

#textInput {
  display: block;
  width: 160px;
  height: 20px;
  background: #EEE;
  border: 1px dashed #CCC;
}
<div id="textOutput"></div>
<div id="textInput" contenteditable="true"></div>

Articles connexes


Ajouter un espace tous les 4 caractères dans le bloc de texte wpf

HellFireElite J'ai un bloc de texte de carte que j'utilise pour montrer à l'utilisateur le numéro de la carte: <TextBlock x:Name="ccCard" Text="0000 0000 0000 0000" HorizontalAlignment="Center" Foreground="LightGray" FontFamily="Global Monospace" Grid.ColumnS

Comment envelopper le texte dans un `td`

Yisroel M. Olewski J'ai une simple fossette table <table><tr><td>112124 12452123 12 545212415 5415451 54154 1545154545 5414956472 546461646456 112124 12452123 12 545212415 5415451 54154 1545154545 5414956472 546461646456 112124 12452123 12 545212415 54154