- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建待办事项列表。每个 li 元素的元素都有两个 SVG 图标。此时,当您在输入字段中键入文本并单击其旁边的加号按钮时,会出现 li 元素但不会出现 SVG 图标。每次向待办事项列表添加新元素时,如何使 SVG 图标出现?
/*var removeSVG = svgElementFromString('<svg version="1.1" id="Capa_1" id="removeB" class="removeB" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 328.51 328.51" style="enable-background:new 0 0 328.51 328.51;" xml:space="preserve"><polygon points="229.044,88.858 164.255,153.647 99.466,88.858 88.858,99.466 153.647,164.255 88.858,229.044 99.466,239.651
164.255,174.862 229.044,239.651 239.651,229.044 174.862,164.255 239.651,99.466 "/> </svg>');*/
document.getElementById('button-plus').addEventListener('click', function(){
var value = document.getElementById('input').value;
if(value) addItem(value);
});
function addItem(text){
var list = document.getElementById('to-do');
item = document.createElement("li");
item.innerText = text;
var buttons = document.createElement('div');
buttons.classList.add('buttons');
var remove = document.createElement('button');
remove.classList.add('remove');
//remove.innerHTML = removeSVG;
var complete = document.createElement('button');
complete.classList.add('complete');
//complete.innerHTML = completeSVG;
buttons.appendChild(remove);
buttons.appendChild(complete);
item.appendChild(buttons);
list.appendChild(item);
}
body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
header {
width: 100%;
height: 70px;
background: rgb(162, 193, 60);
border-bottom-right-radius: 12px;
border-bottom-left-radius: 12px;
box-shadow: 0 0 5px rgb(159, 160, 155);
padding: 0 10px 0 10px;
box-sizing: border-box;
display: flex;
align-items: center;
}
header input {
appearance: none;
text-indent: 10px;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
border-top-left-radius: 12px;
border-bottom-left-radius: 12px;
width: 100%;
background: rgb(233, 255, 170);
height: 45px;
font-family: Century Gothic;
border: none;
box-sizing: border-box;
padding-right: 60px;
}
header button {
position: absolute;
right: 10px;
top: 13.5px;
height: 43px;
width: 50px;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
appearance: none;
border: none;
background: rgb(238, 255, 173);
border-left: 2px solid rgb(162, 193, 60);
cursor: pointer;
}
button svg {
z-index: 6;
position: absolute;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
right: 0;
top: -1px;
}/*
.container{
width: 100%;
margin: auto;
border: 1px solid black;
}*/
.to-do {
width: 100%;
float: left;
list-style-type: none;
box-sizing: border-box;
padding: 0;
/*border: 1px lid black;*/
}
.to-do li{
width: 85%;
background: white;
box-shadow: 0 0 5px rgb(159, 160, 155, 0.5);
min-height: 50px;
margin: auto;
border-radius: 5px;
box-sizing: border-box;
font-family: Century Gothic;
padding: 0 105px 0 25px;
position: relative;
margin-top: 25px;
display: flex;
align-items: center;
}
.to-do li .buttons{
position: absolute;
top: 0;
right: 0;
height: 50px;
width: 100px;
background: white;
}
.to-do li .buttons button{
appearance: none;
width: 47.5px;
height: 50px;
box-sizing: border-box;
position: relative;
background: white;
border: none;
cursor: pointer;
}
.to-do li .buttons button:last-of-type:before{
content: '';
width: 0.8px;
height: 29px;
background: gray;
opacity: 0.4;
float: left;
margin-left: -6px;
}/*
.to-do li button:nth-child(1):hover .x-fill{
fill: red;
transition-duration: 0.3s;
}
.to-do li button:nth-child(2):hover .tick-fill{
fill: orange;
transition-duration: 0.3s;
}*/
.complete svg{
fill: green;
}
.complete svg:hover{
fill: orange;
transition-duration: 0.3s;
}
.remove svg{
fill: gray;
opacity: 0.8;
}
.remove svg:hover{
fill: red;
opacity: 0.7;
transition-duration: 0.3s;
}
<head>
<title>To do List App</title>
</head>
<body>
<header>
<input type="text" placeholder="Next on my to do list is...." id="input">
<button id="button-plus">
<svg width="48" height="43" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="#0186b2" height="28" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" width="4" x="19.5" y="8.5"/>
<rect fill="#47bcbc" height="3" id="svg_2" stroke="#000000" stroke-dasharray="null" stroke-linecap="null" stroke-linejoin="null" stroke-opacity="0" stroke-width="5" width="28" x="7.5" y="20.5"/>
</svg>
</svg>
</button>
</header>
<div class="container">
<ul id="to-do" class="to-do">
<li>First to do <div class="buttons">
<button class="remove"><!--<svg width="45" height="50" id="delete-button" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="gray" height="28.44763" class="x-fill" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(39.2894 22.2822 26.8218)" width="1.49252" x="21.53592" y="12.59797"/>
<rect fill="gray" height="30.65491" class="x-fill" id="svg_2" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(-45.1764 22.3317 26.664)" width="1.70493" x="21.47928" y="11.33651"/>
</svg>-->
<svg version="1.1" id="Capa_1" id="removeB" class="removeB" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 328.51 328.51" style="enable-background:new 0 0 328.51 328.51;" xml:space="preserve">
<polygon points="229.044,88.858 164.255,153.647 99.466,88.858 88.858,99.466 153.647,164.255 88.858,229.044 99.466,239.651
164.255,174.862 229.044,239.651 239.651,229.044 174.862,164.255 239.651,99.466 "/>
</svg>
</button>
<button class="complete"><!--<svg width="45" height="50" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="#21b221" height="28.44763" class="tick-fill" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(39.2894 24.2822 25.8218)" width="1.49252" x="23.53592" y="11.59797"/>
<rect fill="#21b221" height="12.26151" class="tick-fill" id="svg_2" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(-45.1764 11.8548 33.147)" width="1.70493" x="11.00232" y="27.0162"/>
</svg>-->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 52 52" style="enable-background:new 0 0 52 52;" xml:space="preserve">
<path d="M38.252,15.336l-15.369,17.29l-9.259-7.407c-0.43-0.345-1.061-0.274-1.405,0.156c-0.345,0.432-0.275,1.061,0.156,1.406
l10,8C22.559,34.928,22.78,35,23,35c0.276,0,0.551-0.114,0.748-0.336l16-18c0.367-0.412,0.33-1.045-0.083-1.411
C39.251,14.885,38.62,14.922,38.252,15.336z"/>
</svg>
</button>
</div></li>
</ul>
<ul id="completed" class="completed">
</ul>
</div>
</body>
最佳答案
有一种简单的方法可以做到这一点。 Javascript 提供了强大的 cloneNode() 方法,可以克隆整个元素,包括它的所有子元素。您无需手动重新创建待办事项框的结构。
用法很简单:给你想要克隆的元素 - li
- 一个 id 例如master 并将您的 addItem() 函数更改为:
function addItem(text){
var list = document.getElementById('to-do');
var item = document.getElementById("master").cloneNode(true);
item.removeAttribute("id");
item.firstChild.data=text;
list.appendChild(item);
}
克隆实际上意味着克隆,因此克隆的元素将与原始元素共享相同的 id,这就是我们必须从克隆中删除 id 的原因。
这是一个例子:
document.getElementById('button-plus').addEventListener('click', function() {
var value = document.getElementById('input').value;
if (value) addItem(value);
});
function addItem(text) {
var list = document.getElementById('to-do');
var item = document.getElementById("master").cloneNode(true);
item.removeAttribute("id");
item.firstChild.data = text;
list.appendChild(item);
}
body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
header {
width: 100%;
height: 70px;
background: rgb(162, 193, 60);
border-bottom-right-radius: 12px;
border-bottom-left-radius: 12px;
box-shadow: 0 0 5px rgb(159, 160, 155);
padding: 0 10px 0 10px;
box-sizing: border-box;
display: flex;
align-items: center;
}
header input {
appearance: none;
text-indent: 10px;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
border-top-left-radius: 12px;
border-bottom-left-radius: 12px;
width: 100%;
background: rgb(233, 255, 170);
height: 45px;
font-family: Century Gothic;
border: none;
box-sizing: border-box;
padding-right: 60px;
}
header button {
position: absolute;
right: 10px;
top: 13.5px;
height: 43px;
width: 50px;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
appearance: none;
border: none;
background: rgb(238, 255, 173);
border-left: 2px solid rgb(162, 193, 60);
cursor: pointer;
}
button svg {
z-index: 6;
position: absolute;
border-bottom-right-radius: 25px;
border-top-right-radius: 25px;
right: 0;
top: -1px;
}
/*
.container{
width: 100%;
margin: auto;
border: 1px solid black;
}*/
.to-do {
width: 100%;
float: left;
list-style-type: none;
box-sizing: border-box;
padding: 0;
/*border: 1px lid black;*/
}
.to-do li {
width: 85%;
background: white;
box-shadow: 0 0 5px rgb(159, 160, 155, 0.5);
min-height: 50px;
margin: auto;
border-radius: 5px;
box-sizing: border-box;
font-family: Century Gothic;
padding: 0 105px 0 25px;
position: relative;
margin-top: 25px;
display: flex;
align-items: center;
}
.to-do li .buttons {
position: absolute;
top: 0;
right: 0;
height: 50px;
width: 100px;
background: white;
}
.to-do li .buttons button {
appearance: none;
width: 47.5px;
height: 50px;
box-sizing: border-box;
position: relative;
background: white;
border: none;
cursor: pointer;
}
.to-do li .buttons button:last-of-type:before {
content: '';
width: 0.8px;
height: 29px;
background: gray;
opacity: 0.4;
float: left;
margin-left: -6px;
}
/*
.to-do li button:nth-child(1):hover .x-fill{
fill: red;
transition-duration: 0.3s;
}
.to-do li button:nth-child(2):hover .tick-fill{
fill: orange;
transition-duration: 0.3s;
}*/
.complete svg {
fill: green;
}
.complete svg:hover {
fill: orange;
transition-duration: 0.3s;
}
.remove svg {
fill: gray;
opacity: 0.8;
}
.remove svg:hover {
fill: red;
opacity: 0.7;
transition-duration: 0.3s;
}
<head>
<title>To do List App</title>
</head>
<body>
<header>
<input type="text" placeholder="Next on my to do list is...." id="input">
<button id="button-plus">
<svg width="48" height="43" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="#0186b2" height="28" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" width="4" x="19.5" y="8.5"/>
<rect fill="#47bcbc" height="3" id="svg_2" stroke="#000000" stroke-dasharray="null" stroke-linecap="null" stroke-linejoin="null" stroke-opacity="0" stroke-width="5" width="28" x="7.5" y="20.5"/>
</svg>
</svg>
</button>
</header>
<div class="container">
<ul id="to-do" class="to-do">
<li id="master">First to do
<div class="buttons">
<button class="remove"><!--<svg width="45" height="50" id="delete-button" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="gray" height="28.44763" class="x-fill" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(39.2894 22.2822 26.8218)" width="1.49252" x="21.53592" y="12.59797"/>
<rect fill="gray" height="30.65491" class="x-fill" id="svg_2" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(-45.1764 22.3317 26.664)" width="1.70493" x="21.47928" y="11.33651"/>
</svg>-->
<svg version="1.1" id="Capa_1" id="removeB" class="removeB" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 328.51 328.51" style="enable-background:new 0 0 328.51 328.51;" xml:space="preserve">
<polygon points="229.044,88.858 164.255,153.647 99.466,88.858 88.858,99.466 153.647,164.255 88.858,229.044 99.466,239.651
164.255,174.862 229.044,239.651 239.651,229.044 174.862,164.255 239.651,99.466 "/>
</svg>
</button>
<button class="complete"><!--<svg width="45" height="50" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<rect fill="#21b221" height="28.44763" class="tick-fill" id="svg_1" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(39.2894 24.2822 25.8218)" width="1.49252" x="23.53592" y="11.59797"/>
<rect fill="#21b221" height="12.26151" class="tick-fill" id="svg_2" stroke="#000000" stroke-opacity="0" stroke-width="5" transform="rotate(-45.1764 11.8548 33.147)" width="1.70493" x="11.00232" y="27.0162"/>
</svg>-->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 52 52" style="enable-background:new 0 0 52 52;" xml:space="preserve">
<path d="M38.252,15.336l-15.369,17.29l-9.259-7.407c-0.43-0.345-1.061-0.274-1.405,0.156c-0.345,0.432-0.275,1.061,0.156,1.406
l10,8C22.559,34.928,22.78,35,23,35c0.276,0,0.551-0.114,0.748-0.336l16-18c0.367-0.412,0.33-1.045-0.083-1.411
C39.251,14.885,38.62,14.922,38.252,15.336z"/>
</svg>
</button>
</div>
</li>
</ul>
<ul id="completed" class="completed">
</ul>
</div>
</body>
关于javascript - 使 SVG 图标出现在 JS 待办事项列表项上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56894634/
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!