CodePen 上不能 return 模板文字吗?
Can't return a template literal on CodePen?
我在 CodePen 上发现了一些奇怪的东西。如果我 return
来自函数的 template literal,它 returns 是一个空字符串。如果我首先将完全相同的模板文字分配给一个变量,然后 return
变量,它 returns 预期的字符串。
如果我在全页视图或调试模式下查看笔,问题就会消失。
我的问题是,我是在 CodePen 上发现了错误,还是我忽略了我做错了什么?
CodePen 演示:http://codepen.io/VAggrippino/pen/VPbYwM
以下代码片段可能毫无意义,因为它似乎只是 CodePen 的问题...
window.onload = function() {
const useVariable = document.getElementById('useVariable');
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
const cities = [];
fetch(endpoint)
.then(response => response.json())
.then(data => cities.push(...data));
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
const regex = new RegExp(wordToMatch, 'gi');
return place.city.match(regex) || place.state.match(regex);
});
}
function displayMatches() {
const matchArray = findMatches(this.value, cities);
const html = matchArray.map(place => {
if (useVariable.checked) {
let listItem = `
<li>
<span class="name">${place.city}, ${place.state}</span>
<span class="population">${place.population}</span>
</li>
`;
return listItem;
} else {
return `
<li>
<span class="name">${place.city}, ${place.state}</span>
<span class="population">${place.population}</span>
</li>
`;
}
}).join('');
console.log('"' + html + '"');
suggestions.innerHTML = html;
}
const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');
searchInput.addEventListener('change', displayMatches);
searchInput.addEventListener('keyup', displayMatches);
}
html {
box-sizing: border-box;
background: #ffc600;
font-family: 'helvetica neue';
font-size: 20px;
font-weight: 200;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
.search {
width: 100%;
padding: 20px;
}
.search-form {
max-width: 400px;
margin: 50px auto;
}
input.search {
margin: 0;
text-align: center;
outline: 0;
border: 10px solid #F7F7F7;
width: 120%;
left: -10%;
position: relative;
top: 10px;
z-index: 2;
border-radius: 5px;
font-size: 40px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.19);
}
.suggestions {
margin: 0;
padding: 0;
position: relative;
/*perspective:20px;*/
}
.suggestions li {
background: white;
list-style: none;
border-bottom: 1px solid #D8D8D8;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.14);
margin: 0;
padding: 20px;
transition: background 0.2s;
display: flex;
justify-content: space-between;
text-transform: capitalize;
}
.suggestions li:nth-child(even) {
transform: perspective(100px) rotateX(3deg) translateY(2px) scale(1.001);
background: linear-gradient(to bottom, #ffffff 0%, #EFEFEF 100%);
}
.suggestions li:nth-child(odd) {
transform: perspective(100px) rotateX(-3deg) translateY(3px);
background: linear-gradient(to top, #ffffff 0%, #EFEFEF 100%);
}
span.population {
font-size: 15px;
}
.details {
text-align: center;
font-size: 15px;
}
.hl {
background: #ffc600;
}
.love {
text-align: center;
}
a {
color: black;
background: rgba(0, 0, 0, 0.1);
text-decoration: none;
}
<form class="search-form">
<label><input type="checkbox" id="useVariable">Use Variable</label>
<input type="text" class="search" placeholder="City or State">
<ul class="suggestions">
<li>Filter for a city</li>
<li>or a state</li>
</ul>
</form>
您可能从#Javascript30 中认出了这段代码。这是challenge #6。
您的问题是第 32 行中的编码字符。该字符在模板文字中引发错误,这就是它不起作用的原因。我刚刚叉了你的笔并修好了它。在这里查看。
`<li><span class='name'>${place.city}, ${place.state} </span>
<span class='population'>${place.population}</span>
/* <-- here was your problem */ </li>`
CodePen 团队能够通过他们的 Twitter 帐户确认这是 CodePen 中的错误:
https://twitter.com/VAggrippino/status/822727824599490560
我曾希望其中一位也能post在这里回答,但看起来不会发生。
我在 CodePen 上发现了一些奇怪的东西。如果我 return
来自函数的 template literal,它 returns 是一个空字符串。如果我首先将完全相同的模板文字分配给一个变量,然后 return
变量,它 returns 预期的字符串。
如果我在全页视图或调试模式下查看笔,问题就会消失。
我的问题是,我是在 CodePen 上发现了错误,还是我忽略了我做错了什么?
CodePen 演示:http://codepen.io/VAggrippino/pen/VPbYwM
以下代码片段可能毫无意义,因为它似乎只是 CodePen 的问题...
window.onload = function() {
const useVariable = document.getElementById('useVariable');
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
const cities = [];
fetch(endpoint)
.then(response => response.json())
.then(data => cities.push(...data));
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
const regex = new RegExp(wordToMatch, 'gi');
return place.city.match(regex) || place.state.match(regex);
});
}
function displayMatches() {
const matchArray = findMatches(this.value, cities);
const html = matchArray.map(place => {
if (useVariable.checked) {
let listItem = `
<li>
<span class="name">${place.city}, ${place.state}</span>
<span class="population">${place.population}</span>
</li>
`;
return listItem;
} else {
return `
<li>
<span class="name">${place.city}, ${place.state}</span>
<span class="population">${place.population}</span>
</li>
`;
}
}).join('');
console.log('"' + html + '"');
suggestions.innerHTML = html;
}
const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');
searchInput.addEventListener('change', displayMatches);
searchInput.addEventListener('keyup', displayMatches);
}
html {
box-sizing: border-box;
background: #ffc600;
font-family: 'helvetica neue';
font-size: 20px;
font-weight: 200;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
.search {
width: 100%;
padding: 20px;
}
.search-form {
max-width: 400px;
margin: 50px auto;
}
input.search {
margin: 0;
text-align: center;
outline: 0;
border: 10px solid #F7F7F7;
width: 120%;
left: -10%;
position: relative;
top: 10px;
z-index: 2;
border-radius: 5px;
font-size: 40px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.19);
}
.suggestions {
margin: 0;
padding: 0;
position: relative;
/*perspective:20px;*/
}
.suggestions li {
background: white;
list-style: none;
border-bottom: 1px solid #D8D8D8;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.14);
margin: 0;
padding: 20px;
transition: background 0.2s;
display: flex;
justify-content: space-between;
text-transform: capitalize;
}
.suggestions li:nth-child(even) {
transform: perspective(100px) rotateX(3deg) translateY(2px) scale(1.001);
background: linear-gradient(to bottom, #ffffff 0%, #EFEFEF 100%);
}
.suggestions li:nth-child(odd) {
transform: perspective(100px) rotateX(-3deg) translateY(3px);
background: linear-gradient(to top, #ffffff 0%, #EFEFEF 100%);
}
span.population {
font-size: 15px;
}
.details {
text-align: center;
font-size: 15px;
}
.hl {
background: #ffc600;
}
.love {
text-align: center;
}
a {
color: black;
background: rgba(0, 0, 0, 0.1);
text-decoration: none;
}
<form class="search-form">
<label><input type="checkbox" id="useVariable">Use Variable</label>
<input type="text" class="search" placeholder="City or State">
<ul class="suggestions">
<li>Filter for a city</li>
<li>or a state</li>
</ul>
</form>
您可能从#Javascript30 中认出了这段代码。这是challenge #6。
您的问题是第 32 行中的编码字符。该字符在模板文字中引发错误,这就是它不起作用的原因。我刚刚叉了你的笔并修好了它。在这里查看。
`<li><span class='name'>${place.city}, ${place.state} </span>
<span class='population'>${place.population}</span>
/* <-- here was your problem */ </li>`
CodePen 团队能够通过他们的 Twitter 帐户确认这是 CodePen 中的错误:
https://twitter.com/VAggrippino/status/822727824599490560
我曾希望其中一位也能post在这里回答,但看起来不会发生。