如果我通过bookmarklet包含jQuery,它会破坏站点上的原始javascript吗?

如果我通过bookmarklet包含jQuery,它会破坏站点上的原始javascript吗?,jquery,bookmarklet,Jquery,Bookmarklet,我正在创建一个bookmarklet,当然我想使用jQuery。但是,如果我在一个站点上包含jQuery(在头上附加一个脚本标记),那么如果该站点上有其他js,那么该站点本身还能工作吗 玛蒂·莱恩它会破裂吗?…也许:) 我脑子里有两个很常见的原因会发生这种情况。如果他们正在使用另一个库,该库将$用作其主要对象,则您将得到一个冲突,但这是可以解决的,如下所示: var $j = jQuery.noConflict(); //give `$` back to whatever had it... $

我正在创建一个bookmarklet,当然我想使用jQuery。但是,如果我在一个站点上包含jQuery(在头上附加一个脚本标记),那么如果该站点上有其他js,那么该站点本身还能工作吗


玛蒂·莱恩

它会破裂吗?…也许:)

我脑子里有两个很常见的原因会发生这种情况。如果他们正在使用另一个库,该库将
$
用作其主要对象,则您将得到一个冲突,但这是可以解决的,如下所示:

var $j = jQuery.noConflict(); //give `$` back to whatever had it...
$j("selector").doSomething(); //use the $j you assigned or jQuery from now on
if (typeof jQuery == 'undefined') { //load jQuery }
//jQuery has been loaded, either by your or originally, keep going...
if (typeof jQuery == 'undefined') {
  var used = typeof $ != 'undefined';
  //load jQuery 
  if(used) jQuery.noConflict();
}
window.$j = jQuery;
//always use $j in your script, it'll always be present.
另一个可能是,他们已经加载了jQuery(也可能是另一个版本)。在加载脚本之前,我只需添加一个
jQuery
对象测试,如下所示:

var $j = jQuery.noConflict(); //give `$` back to whatever had it...
$j("selector").doSomething(); //use the $j you assigned or jQuery from now on
if (typeof jQuery == 'undefined') { //load jQuery }
//jQuery has been loaded, either by your or originally, keep going...
if (typeof jQuery == 'undefined') {
  var used = typeof $ != 'undefined';
  //load jQuery 
  if(used) jQuery.noConflict();
}
window.$j = jQuery;
//always use $j in your script, it'll always be present.
这个已经加载的解决方案有一个警告,如果他们有一个旧版本的jQuery,您将只拥有该版本的功能。我不知道如何在页面中加载一个旧版本和一个新版本,并且不会有很多奇怪的行为…它只是不是为了这样设计的

另外,对于jQuery已经加载并且是
$
的情况,我将结合这两种变通方法,如下所示:

var $j = jQuery.noConflict(); //give `$` back to whatever had it...
$j("selector").doSomething(); //use the $j you assigned or jQuery from now on
if (typeof jQuery == 'undefined') { //load jQuery }
//jQuery has been loaded, either by your or originally, keep going...
if (typeof jQuery == 'undefined') {
  var used = typeof $ != 'undefined';
  //load jQuery 
  if(used) jQuery.noConflict();
}
window.$j = jQuery;
//always use $j in your script, it'll always be present.

这个怎么样$j(document).ready(function(){//这里像$(selector)}这样的东西行吗?@Martti-您可以将代码包装成$在其中工作,就像这样:
(function($){$(function(){/*document.ready stuff*/});/*其他使用$()*/}的东西(jQuery)
假设我还想加载jQuery UI,它可能已经加载了,也可能没有加载,我如何扩展上述代码,以便检查所有可能性,并且两个库始终存在?@Alp-在这种情况下,您要检查的是jQuery.UI的
类型,而不仅仅是
jQuery
,但我如何告诉jQuery UI jQuery位于自定义名称空间
$j