该attr方法的jQuery文档声明:
属性值是字符串,但有一些属性除外,例如value和tabindex.
似乎确实如此.考虑以下元素:
<input type="text" id="example" tabindex="3">
Run Code Online (Sandbox Code Playgroud)
以下行确实显示"数字",而不是"字符串":
alert(typeof $("#example").attr("tabindex")); //Number
Run Code Online (Sandbox Code Playgroud)
现在,令我困惑的是,在使用DOM方法时getAttribute,您会得到不同的结果:
alert(typeof $("#example")[0].getAttribute("tabindex")); //String
Run Code Online (Sandbox Code Playgroud)
看一下该attr方法的jQuery源代码,看起来jQuery只返回getAttribute返回值,那为什么会有区别呢?这是jQuery源代码的相关行:
ret = elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return ret === null ?
undefined :
ret;
Run Code Online (Sandbox Code Playgroud)
这是展示这个问题的小提琴.只是为了进一步混淆问题,我已经在Chrome 15,Firefox 8,IE8和IE7中尝试了它,并且所有行为如上所述,除了IE7,它警告两者的"数字"(这是我期望发生的) .
是否容易够到添加btn-group到navbar在bootstrap?btn很好,但不是那么多btn-group/div.
当您在浏览器中或在Node.js中运行以下代码时,您将获得注释中列出的预期结果:
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Run Code Online (Sandbox Code Playgroud)
但是,当您在PhantomJS中运行该代码时,输出就是[object DOMWindow]两种情况.
这似乎很奇怪,因为undefined和null都是原始的类型.该typeof操作似乎工作,因为它在其他环境(包括不typeof null === "object"怪癖),所以它会出现PhantomJS并至少有不确定型的概念:
typeof undefined; // "undefined"
Run Code Online (Sandbox Code Playgroud)
它还声称Object.prototype.toString包含本机代码,这可能表明Phantom本身没有做任何修改实现的事情(我不知道是否是这种情况) - 我无法在源代码中找到任何有用的东西):
Object.prototype.toString.toString(); // "function toString() { [native code] }"
Run Code Online (Sandbox Code Playgroud)
那么,为什么PhantomJS不使用(或至少暴露)正确[[Class]]的属性值null和undefined,是有办法,我改变这种状况?我知道我可以使用不同的方法来确定类型,但我宁愿不必这样做.
我目前正在进行项目,当我悬停元素时我必须弹出一些东西,并且在释放元素之后它应该隐藏一段时间后,但是如果我悬停弹出窗口本身定时器应该停止并且弹出窗口不应该隐藏.
所以我尝试了一个简单的计时器,它在释放触发弹出窗口的元素后被激活,当我悬停弹出窗口时计时器停止.但是这样做时会出现一些问题.我有很多元素悬停,当我在短时间内将它们全部悬停时,计时器被覆盖,没有任何工作应该如此.
所以我为我悬停的每个元素实现了一个特定的计时器.我将我的元素的id分配给我的popover中的数据属性,所以我知道哪个popover属于哪个元素.当我悬停元素时,将显示popover.当我释放元素时,计时器启动并且timer-id被分配到我的悬停元素中的data-attr.当我现在悬停我的popover时,我从我的popover中得到相应的elemnt-id,它获得了相应的计时器ID,然后我清除了这个特定的计时器.但它不起作用,当悬停和释放其中一个元素慢慢一切似乎工作,但如果在我可以悬停的元素之间更快一些问题发生.弹出有时只是在几秒钟后随机隐藏.我找不到我做错了什么?如果有人知道如何做得更好,那将是很棒的.码:
$(".timelineTour")
.popover({
offset: 10,
trigger: 'manual',
animate: false,
html: true,
placement: 'right',
template: '<div class="popover" onmouseover="$(this).mouseleave(function() {$(this).hide(); }); console.log(\'mouseover popover\');"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
}).mouseenter(function(){
$('.timelineTour').not($(this)).popover('hide');
$(this).popover('show');
}).mouseleave(function(){
var current = this;
var t = window.setTimeout(function(){
$(current).popover('hide');},1000);
$(current).attr("data-timer",t);
});
$(".popover").live("mouseenter",function () {
var k = $(this).find('.popoverContent').attr("data-tour-id");
var z = $('#'+k).attr("data-timer");
window.clearTimeout(z);
});
Run Code Online (Sandbox Code Playgroud) 关于如何将Twitter Bootstrap的下拉列表从单击显示更改为出现在悬停上似乎有很多问题/答案.Bootstrap的构建者有充分的理由使用点击而不是悬停 - 悬停在大多数平板电脑和手机上都不起作用.但是,我使用Bootstrap的原因之一是它的响应功能.我想要一个可以在台式机,平板电脑和手机上查看的网站.虽然平板电脑和手机需要单击以获取下拉列表,但这不是台式机的预期行为.我希望我的网站能够快速响应,但不要以牺牲用户为例进行培训!
有没有办法为台式机提供悬停下拉菜单并点击平板电脑和手机的下拉菜单?
我目前正在Titanium Studio中使用JavaScript(CommonJS),并对原型设计有疑问.假设我想向现有类添加新函数.例如:
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
Run Code Online (Sandbox Code Playgroud)
我应该添加此代码的最合适的地方是什么,所以它立即可用于所有类?
提前致谢.
// Is this a labeled statement?
//...
if (next_token.labeled !== true || funct === global_funct) {
stop('unexpected_label_a', label);
} //...
Run Code Online (Sandbox Code Playgroud)
有趣的是funct === global_funct比较.通过JSLint运行以下代码段会引发"意外标签"错误,因为带标签的语句位于全局执行上下文中(我知道,这是一个愚蠢的例子.这是一个小提琴.):
loop:
for (var i = 0; i < 10; i++) {
if (i === 5) {
break loop;
}
}
Run Code Online (Sandbox Code Playgroud)
如果将相同的片段放在函数中,JSLint对它非常满意,并且在遇到标签时不会抛出错误.这是一个将传递JSLint的代码.如果您想尝试,可以将代码粘贴到JSLint的在线版本中.
所以我的问题是:在全球代码中使用带标签的语句有什么问题,还是Crockford的另一个人选?
我想检查用户是否输入了日期.但我无法弄明白该怎么做.
这里有一些javascript代码我已经得到但不起作用:
var valueDate = document.getElementById('Date').value;
if ( valueDate== null || valueDate== '')
{
alert('Date is empty');
return false;
}
Run Code Online (Sandbox Code Playgroud)
HTML <input type="date" name="Date" id="Date"/>
提前谢谢!
我试图让模态数据关闭动作工作,以关闭点击模式.似乎有一个我无法找到记录的问题,希望这里有人可以对此有所了解.这是代码
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'/>
<title> Modal test </title>
<link href='themes/default/bootstrap/css/bootstrap.css' rel='stylesheet'/>
<link href='themes/default/bootstrap/css/bootstrap-responsive.css' rel="stylesheet"/>
</head>
<body>
<div class="modal" id="myModal">
<div class="modal-header">
<button class="close" data-dismiss="modal">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<a href="#" class="btn">Close</a>
<a href="#" class="btn btn-primary">Save changes</a>
</div>
</div>
<div class="alert alert-block">
<a class="close" data-dismiss="alert" href="#">x</a>
<h4 class="alert-heading">Warning!</h4>
Best check yo self, you're not...
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="themes/default/bootstrap/js/bootstrap.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
是完整的bootstrap套件,包括bootstrap-modal.js
我把它<div class="alert alert-block">用于测试动作,它似乎在警报中工作但不是模态!
XMLHttpRequest当您包含外部JavaScript文件时,iOS上的Chrome似乎会创建一个对象.它似乎将此对象分配给带有标识符的全局变量a,覆盖您可能已经拥有的任何内容.
测试用例:
HTML文件(test.html):
<!-- ... -->
<script>
var a = 1; // Value is not important for this demonstration
</script>
<script src="test.js"></script>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)外部JavaScript文件(test.js):
setTimeout(function () {
document.write(a); // [object XMLHttpRequest]
a.onreadystatechange = function () {
document.write(a.readyState); // Alternates between "1" and "4"
};
}, 100);
Run Code Online (Sandbox Code Playgroud)将XMLHttpRequest出现反复提出请求(在某个地方......路由通过代理设备连接和监控请求不显示任何东西)和onreadystatechange反复执行的事件处理程序.
更多观察:
setTimeout)window.__gchrome_CachedRequest属性__gchrome_CachedRequest === a有没有人遇到过这个?有没有办法阻止它发生(注意......我不能重命名a)?如果有人知道为什么会这样做,我很想知道.
更新
我刚刚注意到这实际上也发生在内联脚本中,而不仅仅是当你包含一个外部脚本时.我最初没有注意到这一点,因为我没有setTimeout …
javascript ×6
jquery ×2
twitter ×2
chrome-ios ×1
click ×1
dom ×1
hover ×1
input ×1
jslint ×1
modal-dialog ×1
phantomjs ×1
popover ×1
prototype ×1
titanium ×1