我正在尝试制作一个动画报价生成器。目前正在制作一个按钮,该按钮应将生成器中的报价共享到Twitter。然而,当按下按钮时,它不会将qoute分享到Twitter。
帮助感谢如何解决它。
const api = "https://animechan.vercel.app/api/random";
const anime = document.getElementById("anime");
const quote = document.getElementById("quote");
const character = document.getElementById("character");
const btn = document.getElementById("btn");
document.getElementById("twitter")
btn.addEventListener("click", getQuote);
twitter.addEventListener("click", tweetQuote);
function getQuote() {
fetch(api)
.then((res) => res.json())
.then((data) => {
anime.innerHTML = `"${data.anime}"`;
quote.innerHTML = `"${data.quote}"`;
character.innerHTML = `- ${data.character}`;
btn.classList.remove("loading");
btn.innerText = "New Quote";
});
}
function tweetQuote() {
window.open("https://twitter.com/intent/tweet?text="+$('data.quote')).text();
}
<title>Anime Quote Generator 💬</title>
</head>
<body>
<div class="container">
<div class="quote-box">
<h2 id="anime">Anime</h2>
<br>
<p id="quote">"Quote goes here..."</p>
<small id="character">- Character</small>
</div>
<button id="btn">New Quote</button>
<br>
<button id="twitter">TWEET</button>
</div>
<script src="javascript.js"></script>
</body>
</html>
我看到三个问题:
- 一个放错地方的右括号,它应该在
.text()
之后,而不是之前 - jQuery选择器不正确,应该是
$('#quote')
而不是$('data.quote')
。data
对象只存在于fetch...then
处理程序函数内部,而且jQuery是为查找DOM对象而构建的,它不在代码中查找或使用变量 - URL参数需要进行URL编码,否则接收方可能会收到不完整的数据和/或垃圾数据
改进的代码:
function tweetQuote() {
window.open("https://twitter.com/intent/tweet?text=" + encodeURIComponent($('#quote').text()));
}
您可以在下面的代码段中尝试它(除了我使用console.log
,因为window.open
在代码段中不起作用,您可以将URL复制到一个新的浏览器窗口,然后它就会起作用(。
const api = "https://animechan.vercel.app/api/random";
const anime = document.getElementById("anime");
const quote = document.getElementById("quote");
const character = document.getElementById("character");
const btn = document.getElementById("btn");
document.getElementById("twitter")
btn.addEventListener("click", getQuote);
twitter.addEventListener("click", tweetQuote);
function getQuote() {
fetch(api)
.then((res) => res.json())
.then((data) => {
anime.innerHTML = `"${data.anime}"`;
quote.innerHTML = `"${data.quote}"`;
character.innerHTML = `- ${data.character}`;
btn.classList.remove("loading");
btn.innerText = "New Quote";
});
}
function tweetQuote() {
console.log("https://twitter.com/intent/tweet?text=" + encodeURIComponent($('#quote').text()));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Anime Quote Generator 💬</title>
</head>
<body>
<div class="container">
<div class="quote-box">
<h2 id="anime">Anime</h2>
<br>
<p id="quote">"Quote goes here..."</p>
<small id="character">- Character</small>
</div>
<button id="btn">New Quote</button>
<br>
<button id="twitter">TWEET</button>
</div>
<script src="javascript.js"></script>
</body>
</html>