我正在尝试在离线页面上使用一些jQuery。该网站的应用程序使用EmberJS,RequireJS和其他一些技术,但归根结底,我正在尝试用普通的jQuery替换这段难以理解的代码。
以下是一些HTML,应该对交互做出响应:
某个问题 某个答案
注意,我正在使用 而不是 ,因为Chrome会剥离没有父级的标签...我已经确认在我的本地页面中,interactionData和this.container返回的与远程版本的页面相同。
但是那些contentToReveal和initialContent变量让我感到困惑。我只是不理解语法和原型业务的使用,以便我可以找出所需的其余jQuery代码。
有人知道我需要做什么才能使它正常工作吗?
非常感谢! Brian
以下是一些HTML,应该对交互做出响应:
某个问题 某个答案
因此,它只是一个显示/隐藏的交互。
应用程序的代码如下:
define("site/mixins/interactions/reveal_content", ["exports", "jquery"], function (exports, _jquery) {
function RevealContent($el) {
this.el = $el;
this.interactionData = $el.find(".interaction_data");
this.container = $el.find(".interaction_content");
}
RevealContent.prototype = {
init: function init() {
var contentToReveal = (0, _jquery["default"])('<div />').append((0, _jquery["default"])(this.interactionData.find('td')[1]).detach());
var initialContent = (0, _jquery["default"])('<div class="pointer" />').append((0, _jquery["default"])(this.interactionData.find('td')[0]).detach());
this.container = this.container.parent().find('.RevealContent');
this.container.append(initialContent);
this.container.append(contentToReveal.hide());
initialContent.click(function () {
(0, _jquery["default"])(contentToReveal).slideToggle('slow');
});
// prevent any links within initialContent from navigating anywhere
initialContent.find('a').click(function (e) {
e.preventDefault();
});
}
};
我已经开始尝试使用纯jQuery替换上面的代码,但是有些代码很难解码,例如(0, _jquery["default"])。
有没有人知道如何将上面的代码转换为纯jQuery,以便不需要外部依赖项,也不需要与应用程序进行通信?
这里有一个带有一些HTML和原始代码的jfiddle。
https://jsfiddle.net/0s6xdk9q/1/
以下是我迄今为止对重写所做的工作:
$(document).ready(function() {
$(this).on('click', '.interaction_booted', function () {
//console.log('made it here');
interactionData = $(this).find(".interaction_data");
this.container = $(this).find(".interaction_content");
var contentToReveal = $('<div />', this.container).append($(interactionData.find('tdd')[1]).detach());
var initialContent = $('<div class="pointer" />', this.container).append($(interactionData.find('tdd')[0]).detach());
this.container = this.container.parent().find('.RevealContent');
this.container.append(initialContent);
this.container.append(contentToReveal.hide());
initialContent.click(function () {
$(contentToReveal).slideToggle('slow');
});
});
});
注意,我正在使用 而不是 ,因为Chrome会剥离没有父级的标签...我已经确认在我的本地页面中,interactionData和this.container返回的与远程版本的页面相同。
但是那些contentToReveal和initialContent变量让我感到困惑。我只是不理解语法和原型业务的使用,以便我可以找出所需的其余jQuery代码。
有人知道我需要做什么才能使它正常工作吗?
非常感谢! Brian
$
函数实际上是 DOM 工具的瑞士军刀。$("div")
将选择页面上所有<div>
元素(它大致相当于document.getElementsByTagName("div")
),但$("<div/>")
实际上会创建一个新的<div>
元素,可以稍后插入,例如使用append
(它大致相当于document.createElement("div")
)。请参阅文档。 - p.s.w.gthis.container
是对另一个文档的引用,例如在 iframe 中或通过window.open
创建的另一个窗口中。我也不清楚这段代码的意图,所以除了告诉你它是做什么的之外,我不确定我能为你提供更多的帮助。 - p.s.w.g