小编Jam*_*mes的帖子

每个JavaScript程序员应该知道什么?

每个JavaScript程序员都应该知道一组能够说"我知道JavaScript"的东西吗?

javascript programming-languages

368
推荐指数
17
解决办法
8万
查看次数

获取相对URL的绝对URL.(IE6问题)

我目前正在使用以下函数将相对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 url internet-explorer-6

80
推荐指数
8
解决办法
5万
查看次数

我在哪里使用JavaScript中的按位运算符?

我读过"什么是按位运算符?" ,所以我知道运算符什么 ,但我还不清楚如何使用它们.任何人都可以提供任何实际的例子,说明位运算符在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)

javascript bitwise-operators

69
推荐指数
9
解决办法
3万
查看次数

在JavaScript中循环使用一组元素的最佳方法是什么?

在过去和大多数我目前的项目中,我倾向于使用这样的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中的元素或任何数组的最佳实践?

javascript arrays loops elements

53
推荐指数
7
解决办法
10万
查看次数

最简单的DOM节点排序方式?

如果我有这样的列表:

<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)

javascript dom

49
推荐指数
7
解决办法
5万
查看次数

如果另一列为null,则选择一列

我想选择a2.date它是否在那里,但如果NULL我想选择a1.date(a2正在加入).这个:

SELECT a2.date OR a1.date
       ...
Run Code Online (Sandbox Code Playgroud)

简单地返回一个布尔结果(正如人们所期望的那样),但是如何获得非空列的实际值呢?(a2.date首选,但如果它为null则a1.date)

mysql sql

40
推荐指数
3
解决办法
5万
查看次数

innerText/textContent与检索每个文本节点

我听说使用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中不起作用

javascript dom

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

将本地仓库重置为与远程仓库完全相同

如何重置本地git仓库与远程仓库完全相同?

我试过了:

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

但现在git status说我有不同的提交.我基本上想要擦除我在本地获得的任何东西,并在我的本地机器上获得准确的远程仓库.

git

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

伪古典与"JavaScript方式"

刚读完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"是一个人,她会建议什么?

另外:当克罗克福德说一个特定的设计模式"比另一个更具表现力"时,他的意思是什么?

javascript

18
推荐指数
1
解决办法
5112
查看次数

在Perl中,我如何测试序列的形式是n,n + 1,n + 2,...,n + k?

我正在尝试实现一个子程序,该子程序将数组作为其参数(或使用多个参数 - 仍然没有完全区分),并返回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很新,我想知道是否有更简单或更简洁的方法来实现这一目标?另外,我是根据最佳实践编写的吗?

perl

17
推荐指数
5
解决办法
2647
查看次数