javascript - 如何使用 Javascript 在 div 中的文本之间创建可点击的范围

标签 javascript html innerhtml

有一个现有的 html div,里面有文本。我希望使用附加文本修改 div 的内容,但在现有文本 (A) 和我要插入的文本 (C) 之间添加一段文本 (B)。 Span 还具有由 id 实现的 css 样式,但从代码片段中删除,因为它不直接相关。

如果该跨度位于最后,我可以简单地将跨度作为子项附加,这会将其放在 div 文本的末尾。但是,我稍后添加到 div 的任何文本仍将出现在跨度之前。跨度总是在末尾,至少据我所知。

假设现有的 div 表示“Hello World”。我希望使用 Javascript 添加以下内容:

var targetDiv = div;
div.textContent = 'Hello World! ';
var spanText = div.appendChild(document.createElement('span'));
spanText.innerHTML = 'Click Me!';
spanText.onclick = function(){
  perform task here;
};
div.textContent += ' Did you click it?';

div 不会显示“Hello World。点击我!你点击了吗?”它将显示“Hello World。您单击它了吗?单击我!”

我尝试在附加文本时使用innerHTML在div内制作跨度,如下所示:

var targetDiv = div;
div.textContent = 'Hello World! ';
targetDiv.innerHTML += '<span>Click Me!</span> Did you click it?';
var spanText = div.span; //and variations such as div.children(1);
spanText.onclick = function(){
  perform task here;
};

这里的问题是我猜测由于它在innerHTML中,javascript无法识别/找到跨度,因此无法为其分配变量名。或者分配 onclicks 和其他东西到它上面。在这里,文本确实显示正确,如“Hello World.Click Me!Did you click it?”,但 onclick 不起作用。所以我尝试将 onclick 函数(是的,一个单行函数)放在 innerHTML 中,如下所示:

var targetDiv = div;
div.textContent = 'Hello World! ';
targetDiv.innerHTML += '<span onclick = "perform task here;">Click Me!</span> Did you click it?';

这也不起作用。与第一次尝试不同,与第二次尝试类似,文本显示正确,但功能不起作用。

至于为什么我要做这样一个毫无意义的练习,这只是我正在做的事情的一个抽象示例,我觉得在这种情况下上传实际代码只会让不必要的上下文陷入困境。不过,如果需要的话,我准备提供任何澄清。

请使用普通 JS。目前我的项目中还没有 JQuery,将它放入这么一小段代码似乎有点大材小用。

非常感谢您的帮助,谢谢!

最佳答案

不要使用 textContent,而是使用 createTextNodeappendChild,请参阅 *** 行:

var targetDiv = div;
div.appendChild(document.createTextNode('Hello World! '));      // ***
var spanText = div.appendChild(document.createElement('span'));
spanText.innerHTML = 'Click Me!'; // Could use `createTextNode` here as well...
spanText.onclick = function(){
  // perform task here;
};
div.appendChild(document.createTextNode(' Did you click it?')); // ***

实例:

var div = document.createElement("div");

div.appendChild(document.createTextNode('Hello World! '));
var spanText = div.appendChild(document.createElement('span'));
spanText.innerHTML = 'Click Me!'; // Could use `createTextNode` here as well...
spanText.onclick = function(){
  console.log("Clicked!");
};
div.appendChild(document.createTextNode(' Did you click it?'));

document.body.appendChild(div);

当然,另一种方法是使用innerHTML,然后获取跨度:

div.innerHTML = "Hello World! <span>Click Me!</span> Did you click it?";
div.querySelector("span").onclick = function(){
  console.log("Clicked!");
};

实例:

var div = document.createElement("div");

div.innerHTML = "Hello World! <span>Click Me!</span> Did you click it?";
div.querySelector("span").onclick = function(){
  console.log("Clicked!");
};

document.body.appendChild(div);

关于javascript - 如何使用 Javascript 在 div 中的文本之间创建可点击的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916703/

相关文章:

javascript - 使用 javascript 和 HTML 将下拉组合框添加到 innerHTML 中

Javascript insideHTML 弄乱了 html 属性

javascript - 为什么 Typescript 不能推断可选参数的函数参数类型?

javascript - 自定义文件上传脚本在 safari 中不起作用

javascript - 如何解决 Cannot assign to read only property 'exports' of object in react?

javascript - 如何使用jQuery同步加载页面

angular - 需要访问 Angular 5 指令文本

javascript - 在ajax调用中传递计数器

javascript - 使用jquery抓取标题

javascript - 如何使用 JavaScript 正则表达式向文本添加标记