JavaScript 中动态生成的 LinkedIn 分享按钮
Dynamically generated LinkedIn share button in JavaScript
在开始之前我应该提到我最近发布了一个 where I was trying to do the same with Twitter. I ended up using the twttr.widgets.createShareButton function which worked very cleanly. There may be a similar solution to this issue but I haven't yet been able to find something like that from reading the Microsoft LinkedIn share-plugin 指南。
我正在使用详细信息和摘要标签来显示职业列表,每个摘要中的数据元素存储附加到网站 URL 的代码。当用户单击摘要元素时,它会创建一个超链接,指向包含该角色的功能技能列表的页面。
然后我想生成一个按钮,以便网站用户可以分享到 LinkedIn。
这是我的 codepen 以及我目前所拥有的。我已将用于生成 LinkedIn 共享按钮的代码放入名为 lnShare 的函数中。
下面的行似乎不起作用。
document.getElementById("p3").appendChild(ln)
我尝试从 lnShare 函数返回 ln,然后在调用该函数后直接调用 appendChild,但这也不起作用。我得到:
ReferenceError: ln is not defined
为了更好地说明我正在尝试执行此操作 codepen 显示它与 Twitter twttr.widgets.createShareButton 功能一起使用。
这是我的代码:
function lnShare() {
console.log("lnShare started");
const ln = document.createElement('script');
ln.id="LN";
ln.type="IN/Share";
ln.setAttribute("data-url", fs.href);
//document.getElementById("p3").appendChild(ln);
console.log(ln);
return ln;
}
const root = "https://www.onetonline.org/link/summary/";
const fs = document.createElement('a');
fs.id="FS";
const linkText = document.createTextNode("functional skills");
fs.appendChild(linkText);
fs.classList.add("hide");
fs.title = "functional skills";
fs.href = "https://www.onetonline.org/link/summary/";
document.getElementById("p1").appendChild(fs);
document.getElementById("container").addEventListener("click",function(e) {
const tgt = e.target;
const isSummary = tgt.tagName==="SUMMARY";
const code = tgt.dataset.code;
console.log(root+code);
fs.classList.toggle("hide",!isSummary || !code); // show only if summary AND code exists
if (isSummary && code) {
fs.href=root+code;
console.log(fs.href);
lnShare(fs.href);
document.getElementById("p3").appendChild(ln);
}
})
.hide { display:none; }
<div id="container">
<details id="agriculture" class="details">
<summary>Agriculture</summary>
<details>
<summary data-code="53-7064.00">Picking & packing</summary>
</details>
<details>
<summary data-code="45-2092.02">Farm worker</summary>
</details>
<details>
<summary data-code="45-2091.00">Agricultural Equipment Operator</summary>
</details>
<details>
<summary data-code="45-2093.00">Farmworkers, Farm, Ranch, and Aquacultural Animals</summary>
</details>
</details>
<details id="construction" class="details">
<summary>Construction</summary>
<details>
<summary data-code="47-2061.00">Construction Labourer</summary>
</details>
<details>
<summary data-code="47-2073.00">Operating Engineers and Other Construction Equipment Operators</summary>
</details>
<details data-code="47-2051.00">
<summary>Cement Masons and Concrete Finishers</summary>
</details>
<details>
<summary data-code="47-2021.00">Brickmasons and Blockmasons</summary>
</details>
<details>
<summary data-code="47-4031.00">Fence Erector</summary>
</details>
<details>
<summary data-code="17-3031.01">Surveying Technician</summary>
</details>
</details>
</div>
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
<script src="https://platform.linkedin.com/in.js" type="text/javascript">lang: en_US</script>
非常感谢所有帮助。
您在 document.getElementById("p3").appendChild(ln);
中引用了 ln
,但该变量尚未初始化。您需要将上一行更新为 const ln = lnShare(fs.href);
第一个问题是 ln
不在 document.getElementById("p3").appendChild(ln)
行的范围内,您可以尝试使用 document.getElementById("p3").appendChild(lnShare())
在开始之前我应该提到我最近发布了一个
我正在使用详细信息和摘要标签来显示职业列表,每个摘要中的数据元素存储附加到网站 URL 的代码。当用户单击摘要元素时,它会创建一个超链接,指向包含该角色的功能技能列表的页面。 然后我想生成一个按钮,以便网站用户可以分享到 LinkedIn。
这是我的 codepen 以及我目前所拥有的。我已将用于生成 LinkedIn 共享按钮的代码放入名为 lnShare 的函数中。 下面的行似乎不起作用。
document.getElementById("p3").appendChild(ln)
我尝试从 lnShare 函数返回 ln,然后在调用该函数后直接调用 appendChild,但这也不起作用。我得到:
ReferenceError: ln is not defined
为了更好地说明我正在尝试执行此操作 codepen 显示它与 Twitter twttr.widgets.createShareButton 功能一起使用。
这是我的代码:
function lnShare() {
console.log("lnShare started");
const ln = document.createElement('script');
ln.id="LN";
ln.type="IN/Share";
ln.setAttribute("data-url", fs.href);
//document.getElementById("p3").appendChild(ln);
console.log(ln);
return ln;
}
const root = "https://www.onetonline.org/link/summary/";
const fs = document.createElement('a');
fs.id="FS";
const linkText = document.createTextNode("functional skills");
fs.appendChild(linkText);
fs.classList.add("hide");
fs.title = "functional skills";
fs.href = "https://www.onetonline.org/link/summary/";
document.getElementById("p1").appendChild(fs);
document.getElementById("container").addEventListener("click",function(e) {
const tgt = e.target;
const isSummary = tgt.tagName==="SUMMARY";
const code = tgt.dataset.code;
console.log(root+code);
fs.classList.toggle("hide",!isSummary || !code); // show only if summary AND code exists
if (isSummary && code) {
fs.href=root+code;
console.log(fs.href);
lnShare(fs.href);
document.getElementById("p3").appendChild(ln);
}
})
.hide { display:none; }
<div id="container">
<details id="agriculture" class="details">
<summary>Agriculture</summary>
<details>
<summary data-code="53-7064.00">Picking & packing</summary>
</details>
<details>
<summary data-code="45-2092.02">Farm worker</summary>
</details>
<details>
<summary data-code="45-2091.00">Agricultural Equipment Operator</summary>
</details>
<details>
<summary data-code="45-2093.00">Farmworkers, Farm, Ranch, and Aquacultural Animals</summary>
</details>
</details>
<details id="construction" class="details">
<summary>Construction</summary>
<details>
<summary data-code="47-2061.00">Construction Labourer</summary>
</details>
<details>
<summary data-code="47-2073.00">Operating Engineers and Other Construction Equipment Operators</summary>
</details>
<details data-code="47-2051.00">
<summary>Cement Masons and Concrete Finishers</summary>
</details>
<details>
<summary data-code="47-2021.00">Brickmasons and Blockmasons</summary>
</details>
<details>
<summary data-code="47-4031.00">Fence Erector</summary>
</details>
<details>
<summary data-code="17-3031.01">Surveying Technician</summary>
</details>
</details>
</div>
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
<script src="https://platform.linkedin.com/in.js" type="text/javascript">lang: en_US</script>
非常感谢所有帮助。
您在 document.getElementById("p3").appendChild(ln);
中引用了 ln
,但该变量尚未初始化。您需要将上一行更新为 const ln = lnShare(fs.href);
第一个问题是 ln
不在 document.getElementById("p3").appendChild(ln)
行的范围内,您可以尝试使用 document.getElementById("p3").appendChild(lnShare())