- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开展一个学校项目,但遇到了文本内容问题。在 HandleClickbutton 函数内,orderName 和 orderPrice 的 textContent 不起作用。我尝试在全局范围内执行文本内容,然后它确实起作用了。我想做的是,当单击添加按钮时,代码会检查目标 id 是否等于 JSON 中的咖啡 id 之一。如果是,请根据 JSON 信息更改名称和价格。订单对象是一个计数器,每次点击目标,计数器就会增加,这样我就知道每个项目有多少订单。
我没有收到任何错误,所以我不知道哪里出了问题。
import data from './assets/data/coffees.json';
const orders = {
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0
};
const init = () => {
console.log(data);
createPriceList(data);
};
const createPriceList = coffees => {
const ul = document.querySelector('.prices__list');
console.log(coffees);
coffees.coffees.forEach(coffee => {
if (coffee.plantbased === true) {
const li = document.querySelector('.price');
const a = document.createElement('a');
a.classList.add('price__button');
const spanWrapper = document.createElement('span');
spanWrapper.classList.add('price__button__wrapper');
const spanName = document.createElement('span');
spanName.classList.add('price__button__name');
const spanAmount = document.createElement('span');
spanAmount.classList.add('price__button__amount');
const spanPlus = document.createElement('span');
spanPlus.classList.add('price__button__plus');
spanPlus.setAttribute('id', coffee.id);
spanName.textContent = coffee.name;
spanAmount.textContent = '\u20AC';
const price = coffee.prices.medium;
const newPrice = price.toFixed(2); //add 2 decimals
const finalPrice = newPrice.replace('.', ','); //replace . with ,
spanAmount.textContent += finalPrice;
spanPlus.textContent = '+';
ul.appendChild(li);
li.appendChild(a);
a.appendChild(spanWrapper);
spanWrapper.appendChild(spanName);
spanWrapper.appendChild(spanAmount);
a.appendChild(spanPlus);
spanPlus.addEventListener('click', handleClickButton);
}
});
};
const handleClickButton = e => {
document.querySelector('.emptystate').style.display = 'none';
document.querySelector('.hide').style.display = 'initial';
console.log(e.target.id);
orders[e.target.id] ++;
console.log(orders);
data.coffees.forEach(coffee => {
console.log(coffee.id);
if (e.target.id === coffee.id) {
const orderName = document.querySelector('.order__name');
orderName.textContent = coffee.name;
const orderPrice = document.querySelector('.order__price');
orderPrice.textContent = coffee.prices.medium;
}
});
};
init();
我的html:
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap" rel="stylesheet">
<title>The Plant-Based Barista</title>
</head>
<body>
<main class="layout">
<header class="header highlight spaced">
<div class="header__titles">
<a class="h2-like">
The Plant-Based Barista
</a>
<h1 class="h1-like">What do you want<br> to order?</h1>
</div>
<img srcset="./assets/img/image_1.png 102w,
./assets/img/image_1@2x.png 204w" sizes="102px" src="./assets/img/image_1.png" alt="coffee">
</header>
<section class="prices highlight spaced">
<h2 class="visually-hidden">Price list</h2>
<ul class="prices__list">
<li class="price" data-id="1"></li>
<li class="price" data-id="2"></li>
<li class="price" data-id="3"></li>
<li class="price" data-id="4"></li>
</ul>
</section>
<section class="content spaced">
<h2 class="title_mini">Order</h2>
<div class="orders__wrapper hide">
<ul class="orders">
<li class="order">
<div class="order__name__wrapper">
<span class="order__amount">{amount} X</span><span class="order__name">{drink.name}</span>
</div>
<div class="price__wrapper">
<span class="order__price">€ {total}</span>
<button class="remove">
x
</button>
</div>
</ul>
<p class="total">
<span class="total__label">Total</span>
<span class="total__price">€ <span> 0,00</span></span>
</p>
</div>
<div class="emptystate">
<img srcset="./assets/img/coffee-maker.jpg 67w,
./assets/img/coffee-maker@2x.jpg 134w" sizes="67px" src="./assets/img/coffee-maker.jpg" alt="A coffee maker">
<span class="emptystate__content">
Please order something
<span role="img" aria-label="Drunk emoji">
🤪
</span>
</span>
</div>
</section>
</main>
<footer class="nav_bar">
<div class="nav_wrapper nav_active">
<img srcset="./assets/img/home.png 28w" sizes="28px" src="./assets/img/home.png" alt="home">
<p>Home</p>
</div>
<div class="nav_wrapper">
<img src="./assets/img/about.png" alt="about">
<p>About</p>
</div>
<div class="nav_wrapper">
<img src="./assets/img/admin.png" alt="admin">
<p>Admin</p>
</div>
</footer>
</body>
</html>
JSON:
{
"coffees": [
{
"id": 1,
"name": "Oat Latte",
"plantbased": true,
"description": "Latte coffee with oat plant milk.",
"prices": {
"small": 2.5,
"medium": 3.5,
"large": 4.5,
"extra_large": 5.5
}
},
最佳答案
console.log (typeof e.target.id, typeof coffee.id, coffee.name)
会告诉你需要引用 JSON 中的 Coffee.id 来与始终是字符串的元素 id 进行比较。顺便说一句,我不建议使用数字作为 ID...
"coffees": [{
"id": "1", // was a number
const data = {
"coffees": [{
"id": "1",
"name": "Oat Latte",
"plantbased": true,
"description": "Latte coffee with oat plant milk.",
"prices": {
"small": 2.5,
"medium": 3.5,
"large": 4.5,
"extra_large": 5.5
}
}]
}
const orders = {
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0
};
const init = () => {
createPriceList(data);
};
const createPriceList = coffees => {
const ul = document.querySelector('.prices__list');
coffees.coffees.forEach(coffee => {
if (coffee.plantbased === true) {
const li = document.querySelector('.price');
const a = document.createElement('a');
a.classList.add('price__button');
const spanWrapper = document.createElement('span');
spanWrapper.classList.add('price__button__wrapper');
const spanName = document.createElement('span');
spanName.classList.add('price__button__name');
const spanAmount = document.createElement('span');
spanAmount.classList.add('price__button__amount');
const spanPlus = document.createElement('span');
spanPlus.classList.add('price__button__plus');
spanPlus.setAttribute('id', coffee.id);
spanName.textContent = coffee.name;
spanAmount.textContent = '\u20AC';
const price = coffee.prices.medium;
const newPrice = price.toFixed(2); //add 2 decimals
const finalPrice = newPrice.replace('.', ','); //replace . with ,
spanAmount.textContent += finalPrice;
spanPlus.textContent = '+';
ul.appendChild(li);
li.appendChild(a);
a.appendChild(spanWrapper);
spanWrapper.appendChild(spanName);
spanWrapper.appendChild(spanAmount);
a.appendChild(spanPlus);
spanPlus.addEventListener('click', handleClickButton);
}
});
};
const handleClickButton = e => {
document.querySelector('.emptystate').style.display = 'none';
document.querySelector('.hide').style.display = 'initial';
// console.log(e.target.id);
orders[e.target.id]++;
// console.log(orders);
data.coffees.forEach(coffee => {
console.log(typeof e.target.id, typeof coffee.id, coffee.name)
if (e.target.id === coffee.id) {
const orderName = document.querySelector('.order__name');
orderName.textContent = coffee.name;
const orderPrice = document.querySelector('.order__price');
orderPrice.textContent = coffee.prices.medium;
}
});
};
init();
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap" rel="stylesheet">
<title>The Plant-Based Barista</title>
<body>
<main class="layout">
<header class="header highlight spaced">
<div class="header__titles">
<a class="h2-like">
The Plant-Based Barista
</a>
<h1 class="h1-like">What do you want<br> to order?</h1>
</div>
<img srcset="./assets/img/image_1.png 102w,
./assets/img/image_1@2x.png 204w" sizes="102px" src="./assets/img/image_1.png" alt="coffee">
</header>
<section class="prices highlight spaced">
<h2 class="visually-hidden">Price list</h2>
<ul class="prices__list">
<li class="price" data-id="1"></li>
<li class="price" data-id="2"></li>
<li class="price" data-id="3"></li>
<li class="price" data-id="4"></li>
</ul>
</section>
<section class="content spaced">
<h2 class="title_mini">Order</h2>
<div class="orders__wrapper hide">
<ul class="orders">
<li class="order">
<div class="order__name__wrapper">
<span class="order__amount">{amount} X</span><span class="order__name">{drink.name}</span>
</div>
<div class="price__wrapper">
<span class="order__price">€ {total}</span>
<button class="remove">
x
</button>
</div>
</ul>
<p class="total">
<span class="total__label">Total</span>
<span class="total__price">€ <span> 0,00</span></span>
</p>
</div>
<div class="emptystate">
<img srcset="./assets/img/coffee-maker.jpg 67w,
./assets/img/coffee-maker@2x.jpg 134w" sizes="67px" src="./assets/img/coffee-maker.jpg" alt="A coffee maker">
<span class="emptystate__content">
Please order something
<span role="img" aria-label="Drunk emoji">
🤪
</span>
</span>
</div>
</section>
</main>
<footer class="nav_bar">
<div class="nav_wrapper nav_active">
<img srcset="./assets/img/home.png 28w" sizes="28px" src="./assets/img/home.png" alt="home">
<p>Home</p>
</div>
<div class="nav_wrapper">
<img src="./assets/img/about.png" alt="about">
<p>About</p>
</div>
<div class="nav_wrapper">
<img src="./assets/img/admin.png" alt="admin">
<p>Admin</p>
</div>
</footer>
关于javascript - foreach 内的 textContent 无法运行,没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58563595/
我想我在这里遗漏了一些明显流血的东西,如果有任何帮助,我将不胜感激。提前致谢。 我有以下代码,但是当我运行它时它中断并说 .textContent 不能应用于 queryString 因为 query
我有一个这样的html: My title Here is a text and one paragraph Another paragraph
我的磁盘上有一个 xml 文件,其中包含: _gos='monster.gostats.com';_goa=458628; _got=5;_goi
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 4 年前。 我正在尝试 menu
我有一个表,我想在其中提取事件项目的文本。我使用以下代码执行此操作: var addedWorkout = $("#custDropDownMenuA").find(".dropdown-it
这是我的代码: var text1 = "↵,bla bla";//here text1 has value text1 = text1.textContent;//here it is undefi
我正在尝试创建动画 Logo 灵感:http://codepen.io/pavlunya/pen/OPmVem 当我使用 document.getElementById 而不是 document.ge
var container = document.getElementById("grid-container"); var btn = document.getElementById("btn");
我正在尝试获取出现在父 div 标签上方的 h3 标签的 textContent。代码重复,添加 id 不是 h3 标签的选项。希望在纯 Javascript 中做到这一点。我的 html 目前是..
首先,我正在为 JavaScript 创建一个库,但我不能使用 jQuery。我正在尝试获取 HTML 元素的文本内容,但不包含其子元素的文本内容。 属性 innerText 和 textConten
我正在执行 element.textContent = unescapedData 以将未转义的用户输入放在网站上。攻击者有什么办法可以利用它来做坏事吗?如果它有以下 CSS 吗? max-width
我想使用 JavaScript 设置元素的文本内容。如果我这样做: var el = document.getElementById('my-element') el.textContent = '&
下面是我尝试用来从填充有多个 元素的元素内部获取日期的 JavaScript 代码。第 9 个元素包含 YYYY-MM-DD 格式的日期。当我使用这段代码时,它似乎没有将元素转换为 JavaScrip
我想使用一个使用 JavaScript 的脚本来更新网站页脚中的元素。但是,h3 元素没有更新。 我已经尝试过textContent not updating HTML ,但我无法在那里找到我的解决方
我最近在玩耍,注意到一些涉及 .textContent 的奇怪行为属性(property)。 // I understand that .innerHTML should be used here.
我不知道为什么会这样,但我的替换不起作用。考虑到我的语法是正确的,这有点不寻常。 info.textContent.replace('Title', "replaced"); 其中 info 是存储元
需要: 当按钮的 textContent 溢出它的按钮宽度时,我需要一个触发器。 问题: 是否有任何简洁/巧妙的方法来检测 textContent 何时溢出其父项? Codepen Example 更
早上好, 我希望有人能帮我解决这个看似简单的问题。我不明白为什么我的 textContent 或 innerHTML 不会更新我的 DOM。它在我的控制台中显示它已经改变,但由于某种原因我无法理解为什
我向 mozilla 目录提交了一个 Firefox 插件,但由于以下原因被拒绝: item.innerHTML = '' + ''
给定 firstsecond 和 span + span::before { content: ', '; } 我想在 JavaScript 中检索渲染的字符串 'first, secondary
我是一名优秀的程序员,十分优秀!