我知道执行以下操作会更快:
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)
我认为选择器返回某种数组或对象.我正在寻找的是一种合并它们的方法.任何人都知道这是否可行以及如何做到这一点?
谢谢你的帮助!
我正在构建一个用于管理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,如下所示.我想知道:有另一种(更短?)的方式来调用myFirstFunction()从mySecondFunction()?我尝试了this.myFirstFunction()它并没有工作所以也许这里有一些我不知道的神秘伎俩.
var myNameSpace = {
myFirstFunction: function(){
alert("Hello World!");
},
mySecondFunction: function(){
myNameSpace.myFirstFunction();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助像往常一样,SO的人!:)
我必须创建一个带有选择的XSL变量.如下:
<xsl:variable name="grid_position">
<xsl:choose>
<xsl:when test="count(/Element) >= 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标记.那么如何删除那些空格和换行符呢?
在移动设备(iPad,Galaxy Tab)上查看网站时,单击一个元素(常规链接或使用javascript/jquery可点击的任何其他内容)时总会出现延迟.
在线阅读时,我发现浏览器正在使用touchstart,然后是touchend事件,之后它会触发常规点击事件.有没有办法让响应更快,并删除延迟的点击事件?也许通过使用JavaScript或其他东西?
我正在与一个设计师合作开展一个项目,他坚持在页面中使用一些特定字体作为标题和各种元素.所以我们使用字体工具包嵌入@ 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文件的基线差异,我会很高兴听到它.
谢谢!
我正在开发一个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文档更容易理解的方式解释延迟对象的事情,那就太棒了!
谢谢!
我试图只获取用户选择的输入字符串的选定部分.假设我有这样的输入:
<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"和文本输入中都有效.
好的,我知道使用表格进行布局很糟糕.但是我们有一个客户端在所有工作站上都安装了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,但它仍然存在.
我试过了 :
position:relative表格单元格和位置:div上的绝对值,但div总是从浏览器的左上角开始占据他的位置,而不是元素的左上角过去任何人都有过类似的问题吗?在此先感谢您的帮助.
编辑:问题不仅在IE6中,而且在所有浏览器中.
我有这个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>的"群组"吗?或者使用我不知道的不同功能可能更容易?
谢谢!
我需要提醒用户,他们在离开页面时会丢失信息.使用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)
我不知道我在这里想要做什么甚至是可能的......谷歌搜索并没有给我任何指示,所以我转向我最喜欢的专家组!
知道怎么做吗?
谢谢!
我正在开发一个包含一些我无法控制的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对象?
谢谢你的帮助!
只有在满足某些条件时,我才需要更改执行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函数结束.
jquery ×6
javascript ×4
css ×2
xslt ×2
android ×1
css-tables ×1
font-face ×1
html ×1
html5-video ×1
ipad ×1
macos ×1
mobile ×1
requirejs ×1
video.js ×1
webkit ×1