Javascript(ECMAscript)Array.prototype.forEach从版本1.6(ECMAscript edition 3,2005)开始支持该方法.因此,相当多的浏览器已经支持该方法,并且与jQuery的$.each()方法相比,它的速度非常快.
(实际上它胜过所有实现,无论哪个Javascript库)
与jQuery相比,它的速度提高了约60-70%.在JSPerf 上使用forEach和jQuery自己尝试一下.
到目前为止我唯一使用它的缺点是,我无法想象早点打破迭代的方法.喜欢for,while并且do-while有一个break声明,jQuerys .each()支持return false打破循环.
我查看了ECMAScript第5版规范(我发现的最新版本),但他们没有提到从该循环中提前中断.
所以,问题,Douglas Crockford先生会称之为design error?
我错过了什么,有可能提前打破这样的循环吗?
编辑
谢谢你到目前为止的答案.我想既然没有人想出一个"原生"解决方案,那真的没有实现(可能是一个功能?).无论如何,我真的不喜欢建议的方法,所以我愚弄了一点,终于找到了一个我喜欢的(至少,更好).好像:
var div = document.createElement('div'),
divStyle = div.style,
support = jQuery.support,
arr = ['MozTransform', 'WebkitTransform', 'OTransform'];
arr.slice(0).forEach(function(v,i,a){
if(divStyle[v] === ''){
support.transform = v;
a.length = 0;
}
});
Run Code Online (Sandbox Code Playgroud)
这是"真正的"生产代码.我找了一个查找css3转换属性的好方法,我迷失了ecma5规范和奇怪的Javascript论坛:-)
因此,您可以将数组对象本身作为第三个参数传递给.forEach回调.我从原始数组创建一个副本,一旦找到我正在寻找的东西,就调用slice(0)并将其.length属性设置为0.效果很好.
如果有人提出了更好的解决方案,我当然会编辑它.
我有一个要求,将特定数量的矩形(具有定义的宽度但具有随机高度)插入另一个矩形(具有定义的高度和与要插入的矩形相同的定义宽度)。这里的目标是,那些插入的矩形应该尽可能多地填充目标矩形。
例如:

我不需要尽可能多的矩形进入黑色,目标是尽可能多地填充黑色矩形,最好的情况,完全。
实际上,有许多“黑色”矩形和数千个“红色”,我正在寻找一种有效的算法来计算。我必须在 ECMA-/Javascript 中实现它,所以它并不是所有平台中最快的。
我研究了一些算法,例如 Richard E. Korf 的“Optimal Rectangle Packing”或“Bin Packagings Problems”,但我无法真正针对这个特定问题翻译这些算法。
有人可以推荐我一种方法/算法吗?
我最近尝试在输入(文本)字段中镜像一些输入.运用
String.fromCharCode(event.which)
Run Code Online (Sandbox Code Playgroud)
例如,正确翻译所有"标准"字符.好吧,它将它们全部翻译为大写,但您也可以通过查找shift键轻松捕获.
我的问题是,它不能翻译像点,逗号,问号等字符.首先猜测我必须定义一个字符编码集,但这似乎没有帮助.也许它完全不合适?
亲切的问候
--Andy
我想在点击文档时隐藏div,但是当有人点击它或点击其中的链接或按钮时我不想隐藏该div.此外,我在div设置中有一些链接,以防止点击操作(返回false;)并发送ajax请求.
我试过了:
$(document).click(function(e) {
$('#bubble').hide();
});
$('#bubble').click(function(e) {
return false;
});
Run Code Online (Sandbox Code Playgroud)
它工作正常,但#bubble下的链接和按钮不起作用.
我正在创建一个完整的CSS布局.但是,某些浏览器(如IE6)不支持box-shadow(..和-webkit-box-shadow或-moz-box-shadow).我想检查它是否不受支持,然后添加其他样式.
这在jQuery中怎么可能?
Martti Laine
我在这周围旋转了一会儿,但似乎我无法按照我希望的方式完成这项工作.实际上,我想要的是为可选参数设置嵌套的默认值.我想看到的输出应该是:
55, 44, { sub1: '0', sub2: 55, sub3: 'all'}
Run Code Online (Sandbox Code Playgroud)
相反,我只是得到这个:
55, 44, { sub2: 55 }
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个抬头吗?
function foo({ param1=55, param2=44, param3:param3 = { sub1:sub1='0', sub2:sub2=200, sub3:sub3='all' } } = { }) {
console.log(param1, param2, param3);
}
foo({
param3: {
sub2: 55
}
});
Run Code Online (Sandbox Code Playgroud) 我使用jQuery和mouseenter/mouseleave创建了一个简单的动画.它在IE7,FF,Opera,Chrome和Safari中运行良好.
然而,IE7中出现了一些问题 - 根本没有任何反应 - 我甚至无法弹出警报框.
有人可以看一下我的代码,然后告诉我自己做错了什么才能把头发拉出来.
有问题的页面可以在www.ypfservice.net上查看 - 它是joomla安装的一部分,因此是膨胀的代码.
非常感谢
Ë
enter code here$('a.panelImage').parent().addClass('panel');
var numberLinks = $('a.panelImage').length;
for (var j=0; j<numberLinks; j++){
var currentLink = $('a.panelImage').eq(j);
$('<div class="fred"></div>').insertAfter(currentLink);
var gtr=(currentLink.position().left)+'px';
$(currentLink).next().css({ // ie div.fred
'position':'absolute',
'background-position':'0 0',
'top':'222px',
'left':gtr,
'display':'none',
'z-index':'1000',
'width':'5px',
'height':'5px',
'overflow':'hidden',
'backgroundImage':'url(http://www.ypfservice.net/templates/ypftemplate/images/foyerPreview.jpg)',
});
}
$('div.panel').mouseenter(function () {
$(this).find('div').animate({
height: '138px',
width: '184px'
}, 500)
})
.mouseleave(function () {
$(this).find('div').animate({
'width': '0px',
'height': '0px'
}, 500);
}); //end function
Run Code Online (Sandbox Code Playgroud) 有人可以告诉我为什么下面的代码不起作用.它应该提醒它.但即使字段为空,它也会在之后返回true.
<form id="theform" method="post" action="mailme.php">
<input id="field1" name="a" value="field1" type="text" />
<input id="field2" name="b" value="field2" type="text" />
<input id="field3" name="c" value="field3" type="text" />
<input id="field4" name="d" value="field4" type="text" />
<input type="submit" />
</form>
<script>
$('#theform').submit(function(){
$('#theform input[type=text]').each(function(n,element){
if ($(element).val()=='') {
alert('The ' + element.id+' must have a value');
return false;
}
});
return true;
});
</script>
Run Code Online (Sandbox Code Playgroud) 我有一个"uid"属性,它在我的"body"标签上有价值......
$(document).ready(regFunct());
function regFunct(){
alert($("body").attr("uid"));
}
Run Code Online (Sandbox Code Playgroud)
但它说"未定义".有问题?
我在理解以下行为方面遇到了一些麻烦.我有一个<div>包含一些内联块 <div>节点的容器.示例视图:

现在我的要求是,添加新的foobar内联块 <div>元素.没问题,使用jQuery - > .prependTo()救援(应用于父容器).现在问题出现了,第一次使用.prependTo()"某个地方",在新插入的元素的右侧创建了一个不可跟踪的边距(它看起来像这样).例:

正如你所看到的,只有第一个元素有这个边距(同样,我无法使用Firebug/DevTools跟踪空间,看起来它不存在).所有进一步的插入都很好.使用.insertBefore()的第一个元素上也工作正常,看起来不错.不幸的是,我不能.insertBefore()在我的特定用例中使用,这就是为什么我在这里要求一些单挑.
我错过了什么?从哪里来的这个奇怪的边距/间距?怎么避免呢?
这是jsfiddle游乐场,上面的图片来自:
到目前为止,我只在Firefox 4/5/6上测试过.
jquery ×8
javascript ×6
algorithm ×1
css ×1
ecma262 ×1
ecmascript-6 ×1
forms ×1
html ×1
math ×1
optimization ×1
validation ×1