我在安装grunt时遇到问题.所有文档和博客文章教程都说运行:
npm install -g grunt
Run Code Online (Sandbox Code Playgroud)
然后允许你从终端运行grunt命令.
我有一种情况,grunt似乎安装没有错误,但在终端中输入命令grunt仍然给出:
-bash: grunt: command not found
Run Code Online (Sandbox Code Playgroud)
我能做错什么?我在哪里可以找到grunt手动将它添加到我的BASH配置文件中?
鉴于:
<body>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<a xlink:href="url"></a>
</svg>
</body>
Run Code Online (Sandbox Code Playgroud)
是否可以使用HTML DOM .querySelector()或.querySelectorAll()通过其xlink:href属性的内容选择SVG内的链接?
这有效:
document.querySelector('a') // <a xlink:href="url"/>
Run Code Online (Sandbox Code Playgroud)
这些不是:
document.querySelector('[href="url"]') // null
document.querySelector('[xlink:href="url"]') // Error: not a valid selector
document.querySelector('[xlink\:href="url"]') // Error: not a valid selector
document.querySelector('[xlink\\:href="url"]') // null
Run Code Online (Sandbox Code Playgroud)
有没有办法编写该属性选择器,使其"看到" xlink:href?
我一直在寻找一个直接的答案(我可以想到很多可能性,但我想知道真正的原因):
jQuery提供了一个.data()方法,用于将数据与DOM Element对象相关联.是什么让这有必要?将属性(或方法)直接添加到DOM元素对象是否有问题?它是什么?
今天很偶然,我发现在IE6,IE7和IE8中,可以使用jQuery的.css()方法读取不支持的CSS属性:
jQuery(node).css('transition'); // Returns the transition value
Run Code Online (Sandbox Code Playgroud)
这允许我在我的jQuery插件jquery.transitions(github.com/stephband/jquery.transitions)中为这些浏览器添加CSS3过渡的动画回退.喜悦.
问题是:是否可以在其他浏览器中读取不受支持的CSS属性?我在FF3.6和IE9中使用上述方法的初步测试没有结果.有没有其他方法,没有解析样式表?
我对AMD模块的理解(使用例如RequireJs或curl.js)是:
require() 用于异步加载不同的模块,加载后执行回调fn.
要定义模块,您可以使用单独的脚本 define()
但我已经看到一些模块require()在其函数定义中使用,例如
define([a, b, c], function(i, ii, iii){
require([d, e, f], function(d, e, f) {
// do some stuff with these require()'d dependancies
})
/* rest of the code for this module */
})
Run Code Online (Sandbox Code Playgroud)
但我发现这令人困惑,因为我认为如果一个模块具有依赖性,那么它们应该通过main define([dependancies], fnDefinition)函数传递,而不是通过require()上面的例子来实现.
这背后有理由吗?
在ES6中,属性可以定义为符号属性:
var symbol = Symbol();
var object = {};
object[symbol] = 'value';
Run Code Online (Sandbox Code Playgroud)
MDN将可枚举属性定义为"可以通过for..in循环迭代的属性"(1).符号属性永远不会被for ... in循环迭代,因此它们可以被认为是不可枚举的(2).
那么,你能做到这一点是否有意义:
Object.defineProperty(object, symbol, {
value: 'value',
enumerable: true
});
Run Code Online (Sandbox Code Playgroud)
并且查询对象的描述符确实确认了这个属性是可枚举的:
Object.getOwnPropertyDescriptor(object, symbol)
// -> { enumerable: true }
Run Code Online (Sandbox Code Playgroud)
为什么?这有什么用?
(1)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties
(2)for ... in uses [[Enumerate]],仅包含字符串键.由于我们有符号属性,因此可能应该更改MDN上的定义.
使用示例CSS:
.thing { height: auto }
Run Code Online (Sandbox Code Playgroud)
和HTML:
<div class="thing">The quick brown fox jumps over a lazy dog.</div>
Run Code Online (Sandbox Code Playgroud)
是否有可能检测到.thing的高度设置为'auto'?
以下方法返回值:
jQuery('.thing').height() // n
jQuery('.thing').css('height') // 'npx'
getComputedStyle(node).height // 'npx'
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以告诉我浏览器正在从'auto'计算这些值?
移动浏览器模拟鼠标事件,以支持仅将处理程序附加到鼠标事件的网站.但是,如果要实现两个交互模型 - 一个用于鼠标事件,一个用于触摸事件 - 那么防止浏览器模拟鼠标事件会很有帮助.
在iOS Safari上,这非常简单 - 只需在touchend上运行preventDefault:
jQuery(document).on('touchend', function(e) {
// Do some logic
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
这很理智.不幸的是,Android的默认浏览器和Dolfin都没有使用这种技术取消鼠标模拟.(当touchDefault在touchstart上运行时,Dolfin将取消mousedown - 但这不是很有帮助,因为你不知道手指将在touchstart上采取什么动作.)
有没有其他方式有条件地,甚至没有条件地阻止模拟鼠标事件发射?
[编辑]
为了更好地理解问题,我在以下网址开始了触摸事件兼容性表:http://labs.cruncher.ch/touch-events-compatibility-table/
我正在尝试访问附加的多输入音频接口的所有音频通道。我知道使用MediaStream创建通道后,该通道应该由MediaStreamAudioSourceNode节点公开:
navigator.getUserMedia({ audio: true }, function(stream) {
var input = audio.createMediaStreamSource(stream);
console.log(input.channelCount);
});
Run Code Online (Sandbox Code Playgroud)
问题是无论选择哪个设备作为用户媒体源,input.channelCount始终为2。Chrome和FireFox确实如此。
Media Capture and Streams规范指出:
单个MediaStreamTrack可以表示多声道内容,例如立体声或5.1音频或立体视频,其中声道之间具有明确定义的关系。关于频道的信息可能会通过其他API(例如[WEBAUDIO])公开,但是此规范不提供对频道的直接访问。
(http://w3c.github.io/mediacapture-main/getusermedia.html#introduction)
这表明没有办法通过getUserMedia调用来影响通道数量(除非我缺少一些特殊的约束参数)。
MediaStreamAudioSourceNode的WebAudio规范指出:
MediaStream中的第一个AudioMediaStreamTrack将用作音频源。[...]输出的通道数与AudioMediaStreamTrack的通道数相对应。
(http://webaudio.github.io/web-audio-api/#MediaStreamAudioSourceNode)
当我检查getUserMedia创建的流时,它只有一个轨道。据我所知,不可能检查该曲目的频道数量。因此,似乎:
getUserMedia仅将来自连接的设备的前两个音频流传输到单个MediaStreamTrack。
MediaStreamAudioSourceNode除了忽略MediaStreamTrack中的前两个通道外,还忽略了其他任何内容。
有人对此问题有更多信息吗?我想念什么吗?它执行不正确吗?我们如何去解决它?
我想创建一个构造函数来创建一个documentElement对象.
作为一个例子,考虑新的Audio()构造函数 - 它创建一个documentElement对象,如果你传递一些变量,它会用属性填充新的documentElement.它不会将它插入DOM,它只是创建对象.
所以,问题是 - 是什么让documentElement与一个vanilla javascript对象({property:value}类型)不同,你能为对象编写构造函数吗?
编辑:
我正在使用的是在没有它的浏览器中重新创建新的Audio()构造函数,使用quicktime或flash HTMLObjectElement代替HTMLAudioElement.
我可以认为audio.constructor将引用HTMLObjectElement,因为在支持它的浏览器中使用新的Audio(),audio.constructor引用HTMLAudioElement.
我不确定Audio.prototype.当我在具有音频支持的浏览器中查询console.log(Audio.prototype)时,它们根本不返回任何内容 - 甚至在console.log中都没有空行 - 所以这让我感到难过.但是,如果我理解正确,它不会影响我的目标.
目的是能够使用Audio构造函数进行编码,并让浏览器本地处理它,或者在需要时设置插件实例.