每个JavaScript程序员都应该知道一组能够说"我知道JavaScript"的东西吗?
我目前正在使用以下函数将相对URL"转换"为绝对URL:
function qualifyURL(url) {
var a = document.createElement('a');
a.href = url;
return a.href;
}
Run Code Online (Sandbox Code Playgroud)
这在大多数浏览器中运行良好,但IE6坚持仍然返回相对URL!如果我使用getAttribute('href'),它也会这样做.
我能够从IE6中获取合格的URL的唯一方法是创建一个img元素并查询它的'src'属性 - 这个问题是它生成一个服务器请求; 我想避免的事情.
所以我的问题是:有没有办法从IE6中获取完全限定的URL(没有服务器请求)?
在您推荐快速正则表达式/字符串修复之前,我向您保证并非如此简单.基本元素+双周期相对网址+一吨其他潜在变量真的让它变得地狱!
必须有一种方法可以做到这一点,而不必创建一个正则表达式的解决方案?
我读过"什么是按位运算符?" ,所以我知道运算符是什么 ,但我还不清楚如何使用它们.任何人都可以提供任何实际的例子,说明位运算符在JavaScript中有用吗?
谢谢.
只是深入研究jQuery源代码,我发现了几个使用按位运算符的地方,例如:(只有&运算符)
// Line 2756:
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
// Line 2101
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
Run Code Online (Sandbox Code Playgroud) 在过去和大多数我目前的项目中,我倾向于使用这样的for循环:
var elements = document.getElementsByTagName('div');
for (var i=0; i<elements.length; i++) {
doSomething(elements[i]);
}
Run Code Online (Sandbox Code Playgroud)
我听说使用"反向"循环更快但我没有真正的方法来证实这一点:
var elements = document.getElementsByTagName('div'),
length = elements.length;
while(length--) {
doSomething(elements[length]);
}
Run Code Online (Sandbox Code Playgroud)
什么被认为是循环JavaScript中的元素或任何数组的最佳实践?
如果我有这样的列表:
<ul id="mylist">
<li id="list-item1">text 1</li>
<li id="list-item2">text 2</li>
<li id="list-item3">text 3</li>
<li id="list-item4">text 4</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
根据我的偏好重新安排DOM节点的最简单方法是什么?(这需要在页面加载时自动发生,列表顺序首选项从cookie中获取)
例如
<ul id="mylist">
<li id="list-item3">text 3</li>
<li id="list-item4">text 4</li>
<li id="list-item2">text 2</li>
<li id="list-item1">text 1</li>
</ul>
Run Code Online (Sandbox Code Playgroud) 我想选择a2.date它是否在那里,但如果NULL我想选择a1.date(a2正在加入).这个:
SELECT a2.date OR a1.date
...
Run Code Online (Sandbox Code Playgroud)
简单地返回一个布尔结果(正如人们所期望的那样),但是如何获得非空列的实际值呢?(a2.date首选,但如果它为null则a1.date)
我听说使用el.innerText||el.textContent可以产生不可靠的结果,这就是为什么我一直坚持使用以下功能:
function getText(node) {
if (node.nodeType === 3) {
return node.data;
}
var txt = '';
if (node = node.firstChild) do {
txt += getText(node);
} while (node = node.nextSibling);
return txt;
}
Run Code Online (Sandbox Code Playgroud)
此函数遍历元素中的所有节点,并收集所有文本节点的文本以及后代中的文本:
例如
<div id="x">foo <em>foo...</em> foo</div>
Run Code Online (Sandbox Code Playgroud)
结果:
getText(document.getElementById('x')); // => "foo foo... foo"
Run Code Online (Sandbox Code Playgroud)
我很确定使用innerText和存在问题textContent,但我无法在任何地方找到确定的列表,我开始怀疑它是否只是传闻.
任何人都可以提供有关textContent/innerText可能缺乏可靠性的任何信息吗?
编辑:发现Kangax的这个伟大的答案 - 'innerText'在IE中工作,但在Firefox中不起作用
如何重置本地git仓库与远程仓库完全相同?
我试过了:
git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)
但现在git status说我有不同的提交.我基本上想要擦除我在本地获得的任何东西,并在我的本地机器上获得准确的远程仓库.
刚读完Crockford的" JavaScript:The Good Parts ",我对他在伪古典与原型方法上的立场有疑问.其实我对他的立场并不感兴趣; 我只是想了解他的论点,所以我可以建立自己的立场.
在这本书中,克罗克福德似乎可以推断,构造函数和"所有的爵士乐"不应该在JavaScript中使用,他提到如何"新"的关键字被严重实现 - 即非构造函数可以用"新"被称为关键字,反之亦然(可能导致问题).
我以为我知道他来自哪里,但我想我不知道.
当我需要创建一个新模块时,我通常会这样开始:
function MyModule(something) {
this.something = something || {};
}
Run Code Online (Sandbox Code Playgroud)
然后我会为它的原型添加一些方法:
MyModule.prototype = {
setSomething : function(){},
getSomething : function(){},
doSomething : function(){}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢这个模特; 这意味着我可以在需要时创建一个新实例,它有自己的属性和方法:
var foo = new MyModule({option1: 'bar'});
// Foo is an object; I can do anything to it; all methods of the "class"
// are available to this instance.
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何使用更适合JavaScript的方法实现上述目标?换句话说,如果"JavaScript"是一个人,她会建议什么?
另外:当克罗克福德说一个特定的设计模式"比另一个更具表现力"时,他的意思是什么?
我正在尝试实现一个子程序,该子程序将数组作为其参数(或使用多个参数 - 仍然没有完全区分),并返回true或false,具体取决于该数组是否为递增序列(每个数字必须为比上一个多1个):
isIncreasingArray(1,2,3,4); # true
isIncreasingArray(1,2,3,1); # false
isIncreasingArray(0,9,1); # false
isIncreasingArray(-2,-1,0); # true
isIncreasingArray(1,1,1,1); # false
Run Code Online (Sandbox Code Playgroud)
这就是我想出来的:
sub isIncreasingArray {
my $last;
foreach $n (@_) {
return 0 if defined($last) && $last != $n - 1;
$last = int($n);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我对Perl很新,我想知道是否有更简单或更简洁的方法来实现这一目标?另外,我是根据最佳实践编写的吗?