我正在制作一个竖线,它在创建行时对行数进行计数.有两种方法来计算行数:第一种方法是按下一个键(addEventListener("keydown")来创建一行.这是正确的.另一种方法是,我一打开网页就直接显示所有行号,这也是我回答问题所需要的.

PROBLEM.问题是行数没有在我打开网页时立即显示.例如,如果我有3行文本,只要我打开网页,只有1行被检测到.相反,我希望它能直接显示,当我打开的网页,有3行.问题看起来像这样:

enter image description here

WHAT I WOULD LIKE.我想实现这一点,同时也能够通过按下按钮来计算行数(就像我在代码中已经做的那样),但我不想在这两种方式之间遇到冲突.我想在打开网页时(不按任何按钮)得到这个:

enter image description here

我如何才能做到这一点?我正在使用这个,但它不起作用(我是JavaScript新手,对不起):

//VIEW DIRECTLY (WITHOUT PRESSING A BUTTON)
const start2 = textarea.selectionStart;
const end2 = textarea.selectionEnd;

textarea.value =
      textarea.value.substring(0, start2) +
      "\t" +
      textarea.value.substring(end2);

完整代码:

const textarea = document.querySelector("textarea");
const numbers = document.querySelector(".numbers");

//WHEN I PRESS KEY
textarea.addEventListener("keyup", (e) => {
  const num = e.target.value.split("\n").length;
  numbers.innerHTML = Array(num).fill("<span></span>").join("");
});

textarea.addEventListener("keydown", (event) => {
  if (event.key === "Tab") {
    const start = textarea.selectionStart;
    const end = textarea.selectionEnd;

    textarea.value =
      textarea.value.substring(0, start) +
      "\t" +
      textarea.value.substring(end);

    event.preventDefault();
  }
})

//VIEW DIRECTLY (WITHOUT PRESSING A BUTTON)
const start2 = textarea.selectionStart;
const end2 = textarea.selectionEnd;

textarea.value =
      textarea.value.substring(0, start2) +
      "\t" +
      textarea.value.substring(end2);
.editor {
  display: inline-grid;
  grid-template-columns: 3em auto;
  gap: 10px;
  line-height: 21px;
  border-radius: 2px;
  overflow-y: auto;
  width: 100%; 3 schermateeeeeeeeeeeeeeee */
}

.editor>* {
  padding-top: 10px;
  padding-bottom: 10px;
}

.numbers {
  text-align: right;
  background: #333;
  padding-right: 5px;
  height: 150px;
}

.numbers span {
  counter-increment: linenumber;
}

.numbers span::before {
  content: counter(linenumber);
  display: block;
  color: #888;
}

textarea {
  line-height: 21px;
  border: 0;
  background: transparent;
  color: #fff;
  min-width: 500px;
  outline: none;
  resize: none;
  padding-right: 10px;
}

textarea::placeholder{
  color: red;
  }

  textarea{
    background-color: black;
    color: green;
  }
<div class="code-area editor">
  <div class="numbers">
    <span></span>
  </div>

<textarea id="htmlCode" placeholder="HTML"  placeholder="PROVA" wrap="off">Test 1
Test 2
Test 3</textarea>
</div>                   
</div>

推荐答案

通过添加以下代码,您可以创建一个函数并在页面加载时调用该函数:

function updateLineNumbers() {
  const num = textarea.value.split("\n").length;
  numbers.innerHTML = Array(num).fill("<span></span>").join("");
}

//update line numbers when the page loads
updateLineNumbers();

Demo:

const textarea = document.querySelector("textarea");
const numbers = document.querySelector(".numbers");

function updateLineNumbers() {
  const num = textarea.value.split("\n").length;
  numbers.innerHTML = Array(num).fill("<span></span>").join("");
}

// Update line numbers when the page loads
updateLineNumbers();

// Update line numbers when the textarea content changes
textarea.addEventListener("input", updateLineNumbers);

// WHEN I PRESS KEY
textarea.addEventListener("keydown", (event) => {
  if (event.key === "Tab") {
    const start = textarea.selectionStart;
    const end = textarea.selectionEnd;

    textarea.value =
      textarea.value.substring(0, start) +
      "\t" +
      textarea.value.substring(end);

    event.preventDefault();
  }
});
.editor {
  display: inline-grid;
  grid-template-columns: 3em auto;
  gap: 10px;
  line-height: 21px;
  border-radius: 2px;
  overflow-y: auto;
  width: 100%; 3 schermateeeeeeeeeeeeeeee */
}

.editor>* {
  padding-top: 10px;
  padding-bottom: 10px;
}

.numbers {
  text-align: right;
  background: #333;
  padding-right: 5px;
  height: 150px;
}

.numbers span {
  counter-increment: linenumber;
}

.numbers span::before {
  content: counter(linenumber);
  display: block;
  color: #888;
}

textarea {
  line-height: 21px;
  border: 0;
  background: transparent;
  color: #fff;
  min-width: 500px;
  outline: none;
  resize: none;
  padding-right: 10px;
}

textarea::placeholder{
  color: red;
  }

  textarea{
    background-color: black;
    color: green;
  }
<div class="code-area editor">
  <div class="numbers">
    <span></span>
  </div>

<textarea id="htmlCode" placeholder="HTML"  placeholder="PROVA" wrap="off">Test 1
Test 2
Test 3</textarea>
</div>                   
</div>

Javascript相关问答推荐

在JavaScript中检索一些文本

具有相同参数的JS类

我试图实现用户验证的reduxstore 和操作中出了什么问题?

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

基于变量切换隐藏文本

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

更改JSON中使用AJAX返回的图像的路径

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

如何在.NET Core中将chtml文件链接到Java脚本文件?

第一项杀死下一项,直到数组长度在javascript中等于1

当从其他文件创建类实例时,为什么工作线程不工作?

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

输入的值的类型脚本array.排序()

为什么这个最小Angular 的Licial.dev设置不起作用?

如何设置时间选取器的起始值,仅当它获得焦点时?

当达到高度限制时,如何裁剪图像?使用html和css

使用Java脚本在div中创建新的span标记

如何从Reaction-Redux中来自API调用的数据中筛选值

调试jQuery代码以获取所有行的总和(票证类型)