小编Dav*_*ing的帖子

检查object是否是jQuery对象

有没有快速检查对象是jQuery对象还是本机JavaScript对象的方法?

例:

var o = {};
var e = $('#element');

function doStuff(o) {
    if (o.selector) {
        console.log('object is jQuery');
    }
}

doStuff(o);
doStuff(e);
Run Code Online (Sandbox Code Playgroud)

显然,上面的代码有效,但不安全.您可以向o对象添加选择器键并获得相同的结果.有没有更好的方法来确保对象实际上是一个jQuery对象?

符合的东西 (typeof obj == 'jquery')

javascript jquery

587
推荐指数
5
解决办法
16万
查看次数

447
推荐指数
27
解决办法
68万
查看次数

是否可以倾听"风格变化"事件?

是否可以在jQuery中创建一个可以绑定到任何样式更改的事件侦听器?例如,如果我想在元素更改维度时"执行"某些操作,或者我可以执行样式属性中的任何其他更改:

$('div').bind('style', function() {
    console.log($(this).css('height'));
});

$('div').height(100); // yields '100'
Run Code Online (Sandbox Code Playgroud)

这将非常有用.

有任何想法吗?

UPDATE

很抱歉自己回答这个问题,但我写了一个可能适合其他人的简洁解决方案:

(function() {
    var ev = new $.Event('style'),
        orig = $.fn.css;
    $.fn.css = function() {
        $(this).trigger(ev);
        return orig.apply(this, arguments);
    }
})();
Run Code Online (Sandbox Code Playgroud)

这将临时覆盖内部prototype.css方法,并在最后用触发器重新定义它.它的工作原理如下:

$('p').bind('style', function(e) {
    console.log( $(this).attr('style') );
});

$('p').width(100);
$('p').css('color','red');
Run Code Online (Sandbox Code Playgroud)

javascript jquery

190
推荐指数
5
解决办法
14万
查看次数

设置没有值的属性

如何在不添加jQuery值的情况下设置数据属性?我要这个:

<body data-body>
Run Code Online (Sandbox Code Playgroud)

我试过了:

$('body').attr('data-body'); // this is a getter, not working
$('body').attr('data-body', null); // not adding anything
Run Code Online (Sandbox Code Playgroud)

其他所有东西似乎都将第二个参数添加为字符串.是否可以只设置一个没有值的属性?

javascript jquery attributes attr

190
推荐指数
6
解决办法
9万
查看次数

如何在不导致页面滚动的情况下删除位置哈希?

是否有可能删除哈希window.location而不会导致页面跳转到顶部?我需要能够修改哈希而不会引起任何跳转.

我有这个:

$('<a href="#123">').text('link').click(function(e) {
  e.preventDefault();
  window.location.hash = this.hash;
}).appendTo('body');

$('<a href="#">').text('unlink').click(function(e) {
  e.preventDefault();
  window.location.hash = '';
}).appendTo('body');
Run Code Online (Sandbox Code Playgroud)

在这里查看实例:http://jsbin.com/asobi

当用户单击" 链接 "时,修改的哈希标记没有任何页面跳转,因此工作正常.

但是当用户点击" 取消链接 "时,删除了has标记,页面滚动跳转到顶部.我需要删除没有这种副作用的哈希.

javascript jquery fragment-identifier

76
推荐指数
3
解决办法
8万
查看次数

合并jQuery对象

有可能将几个jQuery DOM对象合并到一个数组中并在所有数组上调用jQuery方法吗?

F.ex:

<button>one</button>
<h3>two</h3>

<script>

var btn = $('button');
var h3 = $('h3');

$([btn,h3]).hide();

</script>
Run Code Online (Sandbox Code Playgroud)

这不起作用.我知道我可以使用'button,h3'选择器,但在某些情况下我已经有几个jQuery DOM元素,我需要合并它们,所以我可以在所有这些上调用jQuery原型.

就像是:

$.merge([btn,h3]).hide();
Run Code Online (Sandbox Code Playgroud)

会工作.有任何想法吗?

更新:

解决了它.你可以这样做:

$.fn.add.call(btn,h3);
Run Code Online (Sandbox Code Playgroud)

我将接受这个add()建议,指出我正确的方向.

jquery

63
推荐指数
3
解决办法
3万
查看次数

占位符在满足 - 焦点事件问题

我以前一直试图问这个,没有任何运气解释/证明一个错误发生的工作示例.所以这是另一个尝试:

我试图在一个可信的DIV上复制一个占位符效应.核心概念很简单:

<div contenteditable><em>Edit me</em></div>

<script>
$('div').focus(function() {
    $(this).empty();
});
</script>
Run Code Online (Sandbox Code Playgroud)

这可能有些工作,但如果占位符包含HTML,或者正在进行其他处理,则可删除可编辑DIV的文本插入符,并且用户必须重新单击可编辑的DIV才能开始键入(即使它是仍然是焦点):

示例:http://jsfiddle.net/hHLXr/6/

我不能在处理程序中使用焦点触发器,因为它将创建一个事件循环.所以我需要一种方法来重新设置可编辑DIV中的插入符光标,或者以其他方式重新聚焦.

javascript jquery focus caret contenteditable

61
推荐指数
6
解决办法
4万
查看次数

Webpack和外部库

我正在尝试使用webpack(http://webpack.github.io/)并且它看起来非常好,但是我有点被困在这里.

假设我正在使用CDN作为库,f.ex jQuery.然后在我的代码中,我希望require('jquery')自动指向全局jquery实例,而不是尝试从我的模块中包含它.

我尝试过使用类似的插件IgnorePlugin:

new webpack.IgnorePlugin(new RegExp("^(jquery|react)$"))
Run Code Online (Sandbox Code Playgroud)

这适用于忽略库,但它仍然表示当我运行webpacker时所需的模块"丢失".

不知怎的,我需要告诉webpack jquery应该从全局上下文中获取.看起来像一个常见的用例,所以我很惊讶文档没有具体针对这一点.

javascript require commonjs webpack

48
推荐指数
1
解决办法
7万
查看次数

链接元素onload

反正有没有听一个<link>元素的onload事件?

F.ex:

var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'styles.css';

link.onload = link.onreadystatechange = function(e) {
    console.log(e);
};
Run Code Online (Sandbox Code Playgroud)

这适用于<script>元素,但不适用<link>.还有另外一种方法吗?我只需要知道外部样式表中的样式何时应用于DOM.

更新:

注入一个隐藏的<iframe>,添加<link>到头部并window.onload在iframe中监听事件是不是一个想法?它应该在加载css时触发,但它可能无法保证它被加载到顶部窗口中......

javascript css dom hyperlink dom-events

39
推荐指数
2
解决办法
3万
查看次数

多个requestAnimationFrame性能

如果我正在做多个动画,那么添加多个requestAnimationFrame回调在性能方面是否正常?F.ex:

function anim1() {
    // animate element 1
}

function anim2() {
    // animate element 2
}

function anim3() {
    // animate element 3
}

requestAnimationFrame(anim1);
requestAnimationFrame(anim2);
requestAnimationFrame(anim3);
Run Code Online (Sandbox Code Playgroud)

或者它被证明比使用单个回调更糟糕:

(function anim() {
    requestAnimationFrame(anim);
    anim1();
    anim2();
    anim3();
}());
Run Code Online (Sandbox Code Playgroud)

我问,因为我真的不知道幕后发生了什么,requestAnimationFrame当你多次调用它时排队回调?

javascript performance jquery animation requestanimationframe

37
推荐指数
3
解决办法
1万
查看次数