我在jQuery中看到了许多创建元素的不同样式(以及几种不同的方法).我很好奇建立它们的最清晰的方法,并且如果任何特定方法因任何原因客观上比另一方法更好.以下是我见过的风格和方法的一些例子.
var title = "Title";
var content = "Lorem ipsum";
// escaping endlines for a multi-line string
// (aligning the slashes is marginally prettier but can add a lot of whitespace)
var $element1 = $("\
<div><h1>" + title + "</h1>\
<div class='content'> \
" + content + " \
</div> \
</div> \
");
// all in one
// obviously deficient
var $element2 = $("<div><h1>" + title + "</h1><div class='content'>" + content + "</div></div>");
// broken …Run Code Online (Sandbox Code Playgroud) 我已经看过很多成语,其中大部分都是巧妙而合乎逻辑的.但是当我查看SO的javascript以获得关于良好界面设计的一些想法时,我看到了以下行:
initTagRenderer("".split(" "), "".split(" "));
Run Code Online (Sandbox Code Playgroud)
这真的让我陷入了困境.显然,他们用两个数组初始化标签渲染器,这两个数组恰好包含一个空字符串参数(或者[""],它的"".split(" ")计算结果为).那部分我理解(在我自己的代码中做了同样的事情).但似乎通过一个文字会完成同样的事情.
是否有一些非显而易见的原因,我没有看到作为一个新手(对js,而不是编程)?
此外,我确实尝试搜索,并获得了很多关于split()本身的信息(我已经很清楚了解),但不是成语; 谷歌搜索双引号是徒劳的.
编辑:这是明显的答案.这部分代码是动态生成的,通常不会在SO上填充.
我通过加载页面$.ajax()并插入部分结果到页面的相应部分:
$.ajax({
url: '/whole_page.html',
success: function (data, status, xhr) {
$result = $(xhr.responseText);
$('#menu').html($('#menu', $result).html());
$('#content').html($('#content', $result).html());
}
});
Run Code Online (Sandbox Code Playgroud)
像魅力一样,但我遇到了问题.
现在我的页面包含一些特定于页面的JS,在获取和插入结果时必须执行这些JS.据我所知,script如果你从HTML文本构造一个jQuery对象并对它进行查询,jQuery将不会返回元素(我已经做了一个小提示来演示).所以,我无法通过jQuery有选择地只插入我想要的脚本.
所以我似乎必须script自己从响应文本中提取元素.基本上,我正在寻找正确的方法来做到这一点.这是我到目前为止所提出的:
function pullScripts(text) {
var frag = document.createDocumentFragment()
, div = document.createElement('div')
, scriptElements
;
// This is roughly how jQuery finds the scripts when cleaning text
frag.appendChild(div);
div.innerHTML = text;
scriptElements = div.getElementsByClassName('class-for-scripts-that-we-want');
$('head').append(scriptElements);
}
Run Code Online (Sandbox Code Playgroud)
虽然我还没有在任何糟糕的浏览器上测试过它,但效果还不错.无论如何,复制jQuery的这些基本功能只是为了避免其中一个功能(特殊script处理)感到不舒服.正如在小提琴中可以看到的那样,jQuery对象实际上确实包含scripts,但它不会返回类似.html()或者类似的东西.get().我错过了一些明显的做法吗?
注意:一旦jQuery的内部parseHTML函数暴露出来,这整个主题都没有实际意义 …