我将为我的网站启动一个javascript报告引擎,并开始使用MooTools进行一些原型设计.我真的很喜欢能做这样的事情:
function showLeagues(leagues) {
var leagueList = $("leagues");
leagueList.empty();
for(var i = 0; i<leagues.length; ++i) {
var listItem = getLeagueListElement(leagues[i]);
leagueList.adopt(listItem);
}
}
function getLeagueListElement(league) {
var listItem = new Element('li');
var newElement = new Element('a', {
'html': league.name,
'href': '?league='+league.key,
'events': {
'click': function() { showLeague(league); return false; }
}
});
listItem.adopt(newElement);
return listItem;
}
Run Code Online (Sandbox Code Playgroud)
从我所看到的,jQuery的"采用"类型方法只采用html字符串或DOM元素.是否有任何jQuery等同于MooTools的元素?
如何从元素中删除类?我在文档中看到有一个$().swapClass(),但我没有看到$().removeClass().
这个jsfiddle.net示例包括$H:
new Request.JSON({
url: '/echo/json/',
data: {
json: JSON.encode({
text: 'some text',
array: [1, 2, 'three'],
object: {
par1: 'another text',
par2: [3, 2, 'one'],
par3: {}
}
}),
delay: 3
},
onSuccess: function(response) {
show_response(response, $('post'));
}
}).send();
show_response = function(obj, result) {
$H(obj).each(function(v, k) {
new Element('li', {
text: k + ': ' + v
}).inject(result);
});
result.highlight();
};
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到$ H的含义/功能.有人可以详细说明吗?
我有一个我定义的类,我在我的应用程序中使用.我有一个页面,我想更改覆盖该类的所有实例上的一些方法.这是一些代码来说明.
MyClass的-的script.js
var MyClass = new Class({
foo: function() {
return 1;
},
bar: function() {
return this.foo() + 9;
},
});
Run Code Online (Sandbox Code Playgroud)
变化MyClass的-的script.js
MyClass.implement({
foo: function() {
return this.parent() * -1;
},
});
Run Code Online (Sandbox Code Playgroud)
如果我在页面上包含myclass-script.js,我应该看到:
var test = new MyClass();
test.bar() === 10; //true
Run Code Online (Sandbox Code Playgroud)
如果我包含myclass-script.js然后更改-myclass-script.js,我应该看到:
var test = new MyClass();
test.bar() === 8; //true
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是MyClass.implement适用于MyClass的所有实例,但它没有"覆盖"该方法,它取代了它.所以this.parent()调用失败,因为该方法没有父级.如果我做MyClass.extend它不适合我想要的,我没有看到MyClass的实例调用重写方法.
如何防止浏览器跳转到锚点链接?
我知道我可以在onclick事件上向用户返回“ false”,或者如果有人在使用mootools,则可以执行以下操作
$('button').addEvent('click', function(e) {
e.stop()
//do blabla
});
Run Code Online (Sandbox Code Playgroud)
这将阻止浏览器跳转到锚点,但是我想将锚点保留在url中,以便一个人可以共享链接。我实际上是使用锚来显示动态信息。
有任何想法吗?
我在一个加载Mootools和JQuery的页面中有一个简单的表单.JQuery没有冲突模式,看起来应该没有问题.
有一个名为"名字"的表单元素 -
<input class="required" id="sendname" name="sendname" value="">
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Mootools附加一个click事件,以便在单击名称框时更新其他内容:
$('sendname').addEvent('click', function(e){
// do stuff.
});
Run Code Online (Sandbox Code Playgroud)
问题是click事件永远不会被添加.
加载时出现此错误:
Uncaught TypeError: Cannot call method 'addEvent' of null
Run Code Online (Sandbox Code Playgroud)
当我尝试与js控制台中的元素进行交互时,我收到以下错误:
> $('sendname').setProperty('value', 'test');
TypeError: Object sendname has no method 'setProperty'</strike>
Run Code Online (Sandbox Code Playgroud)
编辑:通过加载更新的Mootools修复了之前的问题.但是,单击事件仍然无法正常运行,但它不会引发错误或警告.
这个代码在我使用过的几乎任何情况下都能正常工作.我假设jQuery存在一些冲突的问题,但$符号工作的事实似乎证实了noConflict模式是可操作的.有任何想法吗?
介绍
我们都知道argumentsJavaScript函数的这些愚蠢对象.
但为什么反对呢?不是阵列吗?
不,这不是,这就是为什么许多人称之为JavaScripts概念的失败:
(function () {
return arguments.slice(); // TypeError: arguments.slice is not a function
}());
Run Code Online (Sandbox Code Playgroud)
意向
好的,这只是我要问的真实内容的介绍,但在问你需要更多信息之前:
虽然在最后几天阅读不同的代码,但在很多地方看到以下代码行时我感到非常伤心.
args = Array.prototype.slice(arguments);
Run Code Online (Sandbox Code Playgroud)
那么,它做了什么,只是简单地将arguments对象"转换" 成一个包含所有原型和东西的数组.
我的解决方案
我想到的是以下内容:虽然JavaScript完全是关于原型设计的,但为什么我们不扩展arguments对象prototype本身呢?我检查了一些网站的现有脚本,但没有发现我打算找到的东西,最后我自己写了:
(function () {
var i, methods;
arguments.constructor.prototype = Array.prototype;
methods = ['concat', 'join', 'pop', 'push', 'reverse', 'shift', 'slice', 'sort', 'splice', 'toString', 'unshift'];
for (i = 0; i < methods.length; i += 1) {
if (arguments.constructor.prototype.hasOwnProperty(methods[i]) === false) {
arguments.constructor.prototype[methods[i]] = Array.prototype[methods[i]];
}
}
}());
Run Code Online (Sandbox Code Playgroud)
压缩后,它只需要260个字节,并通过使用扩展 …
我正在使用Mootools并向链接添加点击事件。我已经向事件添加了一个函数:
$('addCallRoute').addEvent('click', addCallRoute); // Add button
Run Code Online (Sandbox Code Playgroud)
该函数包含以下内容:
function addCallRoute(e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
触发事件的函数(无需实际点击)
$('addCallRoute').fireEvent('click');
Run Code Online (Sandbox Code Playgroud)
问题:
当我实际单击链接时,e已定义。但是当我以编程方式触发该事件时,e是undefined. 为什么?
因此,在尝试让我的应用程序在最新的IE上工作之后,事实证明IE不喜欢以下代码:
document.body.getElement('.className');
Run Code Online (Sandbox Code Playgroud)
Firefox和Chrome的反应还不错,但document.body在IE上没有Mootools Element方法.
细算的文件,一些包裹的例子document.body在$()将其暴露在MooTools的方法.
只是想知道它在FireFox/Chrome中工作正常的原因,但不能在IE中自动运行?
我是新手.如何使用Mootools更改我的background-image css属性?