Cur*_*Guy 2 html javascript jquery
我正在尝试使用 jQuery 制作一个小书签,但在使用 $("body").append(" "); 在正文中附加多个 HTML 命令时遇到语法错误。有没有其他方法可以使用 jQuery 附加多个 HTML 命令?
实际上,我是参考教程制作这个书签的: https: //www.smashingmagazine.com/2010/05/make-your-own-bookmarklets-with-jquery/
我什至发送了书签的代码:
(function () {
var v = "1.3.2";
if (window.jQuery === undefined || window.jQuery.fn.jquery < v) {
var done = false;
var script = document.createElement("script");
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + v + "/jquery.min.js";
script.onload = script.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
done = true;
initMyBookmarklet();
}
};
document.getElementsByTagName("head")[0].appendChild(script);
} else {
initMyBookmarklet();
}
function initMyBookmarklet() {
(window.myBookmarklet = function () {
function getSelText() {
var s = '';
if (window.getSelection) {
s = window.getSelection();
} else if (document.getSelection) {
s = document.getSelection();
} else if (document.selection) {
s = document.selection.createRange().text;
}
return s;
}
if ($("#wikiframe").length == 0) {
var s = "";
s = getSelText();
if (s == "") {
var s = prompt("Forget something?");
}
if ((s != "") && (s != null)) {
$("body").append("<div id='wikiframe'>
<div id='wikiframe_veil' style=''>
<p>Loading...</p>
</div>
<iframe src='http://en.wikipedia.org/w/index.php?&search=" + s + "' onload=" $('#wikiframe iframe').slideDown(500); ">Enable iFrames.</iframe>
<style type='text/css'>
#wikiframe_veil { display: none; position: fixed; width: 100%; height: 100%; top: 0; left: 0; background-color: rgba(255,255,255,.25); cursor: pointer; z-index: 900; }
#wikiframe_veil p { color: black; font: normal normal bold 20px/20px Helvetica, sans-serif; position: absolute; top: 50%; left: 50%; width: 10em; margin: -10px auto 0 -5em; text-align: center; }
#wikiframe iframe { display: none; position: fixed; top: 10%; left: 10%; width: 80%; height: 80%; z-index: 999; border: 10px solid rgba(0,0,0,.5); margin: -5px 0 0 -5px; }
</style>
</div> "); //the append tag ends here, but the browser is showing syntax error on appending multiple HTML codes
$("#wikiframe_veil").fadeIn(750);
}
} else {
$("#wikiframe_veil").fadeOut(750);
$("#wikiframe iframe").slideUp(500);
setTimeout("$('#wikiframe').remove()", 750);
}
$("#wikiframe_veil").click(function (event) {
$("#wikiframe_veil").fadeOut(750);
$("#wikiframe iframe").slideUp(500);
setTimeout("$('#wikiframe').remove()", 750);
});
})();
}
})();
Run Code Online (Sandbox Code Playgroud)
那么有什么办法可以消除这个错误呢。我希望我的问题足够清楚。提前致谢!
不幸的是,当你在多行上有一个文本字符串时,JavaScript 会破坏解析,你必须在同一行上打开和关闭引号。然而,有几种方法可以解决这个问题:
您应该将.append()参数折叠在一行上并返回一个连续的 HTML 字符串,如下所示:
$("body").append("<div id='wikiframe'><div id='wikiframe_veil' style=''><p>Loading...</p></div></div>");
Run Code Online (Sandbox Code Playgroud)
或者,如果您想保持代码缩进以获得更好的易读性,那么您可以连接多行,并在每行末尾附加一个加号,如下所示:
$("body").append("<div id='wikiframe'>" +
"<div id='wikiframe_veil' style=''>" +
"<p>Loading...</p>" +
"</div>" +
"</div>");
Run Code Online (Sandbox Code Playgroud)
我的建议(可能是理想的方法,因为它看起来更干净)是用 HTML 行加载一个数组,然后以这种时尚的方式再次使用空白空间加入该数组:
var html = [
'<div id="wikiframe">',
'<div id="wikiframe_veil" style="">',
'<p>Loading...</p>',
'</div>',
'</div>',
];
$("body").append(html.join(''));
Run Code Online (Sandbox Code Playgroud)
现在,您的代码干净、可读,并且页面上注入的 HTML 将是单行且已压缩
https://jsfiddle.net/e2bt47c0/
更新答案,如果您的项目有一个适用于 ES6 的转译器,并且您可以使用模板字符串,您可以执行以下操作,这更加容易和干净:
$("body").append("<div id='wikiframe'><div id='wikiframe_veil' style=''><p>Loading...</p></div></div>");
Run Code Online (Sandbox Code Playgroud)