小编Gab*_*iel的帖子

是否可以在jQuery中使用多个变量而不是选择器

我知道执行以下操作会更快:

var $header = $("#header");
$header.css({color:"#ff0000"});
$header.find("a").addClass("foo");
Run Code Online (Sandbox Code Playgroud)

代替:

$("#header").css({color:"#ff0000"});
$("#header a").addClass("foo");
Run Code Online (Sandbox Code Playgroud)

因为jQuery不需要在DOM中再次找到元素,因为我们直接引用它们.

让我们说我有这个:

var $header_elements = $("#header li");
var $footer_elements = $("#footer li");
Run Code Online (Sandbox Code Playgroud)

我单独使用它们进行一些jQuery操作.但是,我需要在两者上做点什么.使用选择器,我会这样做:

$("#header li, #footer li").css({color:"#ff0000"});
Run Code Online (Sandbox Code Playgroud)

但是,需要再次解析DOM才能找到匹配的元素.有没有办法使用我以前声明的变量而不是新的选择器?像下面的内容(这是工作的,我知道,这是给什么我正在寻找一个想法):

$($header_elements + $footer_elements).css({color:"#ff0000"});
Run Code Online (Sandbox Code Playgroud)

我认为选择器返回某种数组或对象.我正在寻找的是一种合并它们的方法.任何人都知道这是否可行以及如何做到这一点?

谢谢你的帮助!

jquery

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

Firefox上不会调用HTML5视频的canplay/canplaythrough事件.为什么?

我正在构建一个用于管理HTML5视频的jQuery插件.我正在尝试捕捉canplay和canplaythrough事件.在Chrome中,该事件被解雇没有问题.在Firefox中,有时触发它,有时它不是.

我在这里简化了我的代码:

$('#my_video').on('canplay canplaythrough', function(){
    console.log('canplay event fired');
});
Run Code Online (Sandbox Code Playgroud)

我也尝试使用原生的javascript .addEventListener()并且它不起作用.

知道为什么没有在Firefox上调用该事件以及如何解决这个问题?

注意:请不要告诉我使用已经可用的插件,如jplayer和video-js,我知道它们存在并运行良好,但我必须构建一个内部解决方案.

javascript jquery html5-video

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

如何在同一个javascript命名空间中调用另一个函数?

我喜欢在命名空间样式中组织我的javascript,如下所示.我想知道:有另一种(更短?)的方式来调用myFirstFunction()mySecondFunction()?我尝试了this.myFirstFunction()它并没有工作所以也许这里有一些我不知道的神秘伎俩.

var myNameSpace = {
    myFirstFunction: function(){
        alert("Hello World!");
    },
    mySecondFunction: function(){
        myNameSpace.myFirstFunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助像往常一样,SO的人!:)

javascript

11
推荐指数
1
解决办法
6492
查看次数

在声明XSL变量时如何删除空格?

我必须创建一个带有选择的XSL变量.如下:

<xsl:variable name="grid_position">
  <xsl:choose>
    <xsl:when test="count(/Element) &gt;= 1">
      inside
    </xsl:when>
    <xsl:otherwise>
      outside
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

后来在我的代码中,我做了一个xsl,如果:

<xsl:if test="$grid_position = 'inside'">
   {...code...}
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

问题是我的变量永远不会='内部',因为换行符和缩进.如何从变量中删除空格?我知道我可以disable-output-escaping="yes"在xsl:copy-of中使用它时将其删除,但它不适用于xsl:variable标记.那么如何删除那些空格和换行符呢?

xslt

10
推荐指数
3
解决办法
3382
查看次数

有没有办法消除移动触摸设备上的点击延迟?

在移动设备(iPad,Galaxy Tab)上查看网站时,单击一个元素(常规链接或使用javascript/jquery可点击的任何其他内容)时总会出现延迟.

在线阅读时,我发现浏览器正在使用touchstart,然后是touchend事件,之后它会触发常规点击事件.有没有办法让响应更快,并删除延迟的点击事件?也许通过使用JavaScript或其他东西?

mobile android webkit ipad

9
推荐指数
2
解决办法
6900
查看次数

是否有可能创建一个Mac OS特定的CSS来修复字体差异?

我正在与一个设计师合作开展一个项目,他坚持在页面中使用一些特定字体作为标题和各种元素.所以我们使用字体工具包嵌入@ font-face.

它在PC(Firefox,IE 7和8,Chrome,Safari)上完美运行,但在Mac OS(Safari和Firefox)上,字体不是以相同的方式垂直对齐.在浏览网页后,我没有找到任何解决方案,除了"浏览器和平台之间总是存在差异,与之共存".

我知道跨平台的字体永远不会呈现完全相同,但这次它不像字体看起来更粗体或类似的东西.字体看起来好像它的基线在Windows和Mac OS X之间完全不同.在Mac OS上,字体大小为16px,比PC高3px.

所以我正在寻找一个备份解决方案:有没有办法专门为Mac OS用户创建一个CSS?我不想只针对Safari,因为Safari PC没问题,Firefox Mac也不行.

或者,如果您有解决方案来修复不需要特定CSS文件的基线差异,我会很高兴听到它.

谢谢!

css macos font-face

8
推荐指数
2
解决办法
1万
查看次数

有人能清楚地解释jQuery.when()和deferred.then()是如何工作的吗?

我正在开发一个Web应用程序,我需要加载几个文件$ .ajax.我在$ .when().then()中发现了一些有趣的东西.

当我没有与请求返回的数据有任何特殊关系时,它很有用,如下例所示:

$.when(
    $.getScript('js/script1.js'),
    $.getScript('js/script2.js')
).then(function(){
    // Do whatever I want once both scripts are loaded...
});
Run Code Online (Sandbox Code Playgroud)

如果我有一个像这样的ajax请求,那么效果很好:

$.when(
    $.ajax('xml/myxml.xml')
).then(function(data){
    // Here I can work with data like I would with a regular ajax request
    alert($(data).find('mynode').text());
})
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试以下操作,我无法让它工作:

$.when(
    $.ajax('xml/myxml.xml'),
    $.getScript('js/script.js')
).then(function(data){
    // But here, I can't access $(data).find('mynode')...
})
Run Code Online (Sandbox Code Playgroud)

我读了延迟对象页面,但大多数对我来说太技术了,我无法理解当我使用$ .when().then()加载时我应该能够获取我的ajax数据来自多个来源的脚本和数据.

因此,如果有人可以帮助我在上面的测试用例中找到如何使用我的ajax数据,那就太棒了!如果在此期间有人能够以比官方jQuery文档更容易理解的方式解释延迟对象的事情,那就太棒了!

谢谢!

jquery jquery-deferred

8
推荐指数
1
解决办法
1075
查看次数

我可以在文本表单输入中检索用户选择的文本吗?

我试图只获取用户选择的输入字符串的选定部分.假设我有这样的输入:

<input type="text" name="first_name" id="first_name" value="Enter your name" />
Run Code Online (Sandbox Code Playgroud)

用户通过在文本字段中单击并拖动来选择"输入"单词.我可以用jQuery检索该文本吗?

我知道我可以通过这种方式获得全部价值:

$("#first_name").val();
Run Code Online (Sandbox Code Playgroud)

但到目前为止,我还是没有找到只选择"输入"的部分.任何人都能指出我正确的方向吗?谢谢!

编辑

我尝试了document.getSelection,它在Firefox上的静态文本元素(如"p")上运行良好.到目前为止,它对我的​​文本输入不起作用.

在IE中,window.selection.createRange().text在"p"和文本输入中都有效.

jquery

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

表格单元格中的div元素具有某种间距

好的,我知道使用表格进行布局很糟糕.但是我们有一个客户端在所有工作站上都​​安装了ie6,我们必须制作一个完美的布局才能完美地工作,因此干净的CSS解决方案不起作用所以我不得不用表来做.

这是我的HTML代码:

<body>
<table id="main_table">
  <tr>
    <td>
      <div class="content">Content</div>
    </td>
  </tr>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)

这是我的CSS:

body {
        margin:0;
        padding:0;
     }
#main_table {
        border-collapse:collapse;
        border-spacing:0;
        width:100%;
     }
#main_table td {
         margin:0;
         padding:0;
     }
#main_table div.content {
         margin:0;
         padding:0;
     }
Run Code Online (Sandbox Code Playgroud)

出于一些神秘的原因,在单元格的顶部和div之间存在某种边缘.我绝对肯定我的所有边距和填充都是0,但它仍然存在.

我试过了 :

  • 跨度而不是div,问题仍然存在
  • 使用position:relative表格单元格和位置:div上的绝对值,但div总是从浏览器的左上角开始占据他的位置,而不是元素的左上角

过去任何人都有过类似的问题吗?在此先感谢您的帮助.

编辑:问题不仅在IE6中,而且在所有浏览器中.

html css css-tables

6
推荐指数
1
解决办法
402
查看次数

如何将父元素添加到一组段落中?

我有这个HTML:

<div id="description">
  <h5>Title</h5>
  <p>First paragraph</p>
  <p>Second paragraph</p>
  <p>Third paragraph</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我想用jQuery插入<p>除第一个元素之外的所有元素的父元素.所以我想要生成的HTML是这样的:

<div id="description">
  <h5>Title</h5>
  <p>First paragraph</p>
  <div class="details">
    <p>Second paragraph</p>
    <p>Third paragraph</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

.wrap()jQuery中的函数可以添加父级,但如果我像这样使用它:

$("#description p:not(:first)").wrap('<div class="details" />');
Run Code Online (Sandbox Code Playgroud)

它包裹了我所有的<p>个人.

有什么办法可以修改我的选择器来改变我<div>的"群组"吗?或者使用我不知道的不同功能可能更容易?

谢谢!

jquery

5
推荐指数
1
解决办法
4767
查看次数

使用onbeforeunload确认时是否可以捕获用户的答案?

我需要提醒用户,他们在离开页面时会丢失信息.使用onbeforeunload事件可以轻松完成此操作.我的问题是,如果用户决定离开,我想采取一些行动.

这是一个例子(我正在使用jquery,因为它仍然被加载):

$(window).on('beforeunload', function(e){
    return "Do you really want to leave?";
});
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的事情(这段代码不起作用,我知道,这只是一个例子来说明我正在尝试做什么):

$(window).on('beforeunload', function(e){
    // Ask for user confirmation
    var bUserAnswer = confirm("Do you really want to leave?");

    if(bUserAnswer)
    {
        // Do something...
    }
    else
    {
        // Do something else...
    }
    // Close everything if the user decides to leave...
    return bUserAnswer;
});
Run Code Online (Sandbox Code Playgroud)

我不知道我在这里想要做什么甚至是可能的......谷歌搜索并没有给我任何指示,所以我转向我最喜欢的专家组!

知道怎么做吗?

谢谢!

javascript jquery onbeforeunload

5
推荐指数
1
解决办法
2418
查看次数

当我也使用RequireJS时,如何使用videojs插件

我正在开发一个包含一些我无法控制的JS代码的网站.该代码使用RequireJS加载依赖项和所有.

免责声明:我是RequireJS菜鸟.我理解基础知识,但这几乎是......

在我的网站上,我需要使用VideoJS.VideoJS可以使用,也可以不使用RequireJS,但据我所知,如果在页面的某个地方使用RequireJS,我就无法使用VideoJS.

所以我正在使用RequireJS加载VideoJS,如下所示:

var MyRequire = requirejs.config({
    baseUrl: '/_/js',
    paths: {
        videojs: 'http://vjs.zencdn.net/5.3.0/video'
    }
});
MyRequire(["videojs"], function(videojs) {
    videojs('myPlayer', {}, function(){
        console.log('...');
    });
});
Run Code Online (Sandbox Code Playgroud)

它正在发挥作用.

但我想使用VideoJS插件来管理预卷广告.(https://github.com/dirkjanm/videojs-preroll)

我尝试将插件脚本包含在RequireJS中,包含脚本,但是一旦插件尝试访问videojs对象,我就会收到一个错误,告诉我videojs没有定义.

我的猜测是,当我将VideoJS作为RequireJS模块加载时,它不在全局范围内,而我正在使用的插件正在全局范围内寻找VideoJS,这就是我得到该错误的原因.

有没有什么方法可以使用VideoJS而不将它作为RequireJS模块加载?或者我如何帮助插件找到VideoJS对象?

谢谢你的帮助!

javascript requirejs video.js

5
推荐指数
1
解决办法
2474
查看次数

如何更改每个xsl的顺序?

只有在满足某些条件时,我才需要更改执行for-each的顺序.

这是我的XML的样子:

<OptionList>
    <Option name="My First Option" />
    <Option name="My Second Option" />
</OptionList>
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,我的XML可以是这样的:

<OptionList>
    <Option />
    <Option name="My Second Option" />
</OptionList>
Run Code Online (Sandbox Code Playgroud)

在我的XSL中,我正在为这样做:

<xsl:for-each select="//OptionList/Option">
    {...}
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在for-each中使用此行来更改Option节点的顺序:

<xsl:sort select="position()" data-type="number" order="descending" />
Run Code Online (Sandbox Code Playgroud)

问题是我希望我的订单仅在我的第一个Option节点为空且没有name属性时才下降.否则,我想保持默认的升序.

关于如何实现这一点的任何意见?到目前为止,我尝试的所有内容都以"变量超出范围"或无效使用xpath函数结束.

xslt

4
推荐指数
1
解决办法
9170
查看次数