4

getElementbyid または jQuery("#tagname") による要素の取得は「ハック」と見なされると言われました。

引数はコンパイルされていないため、ばかげたタイプミスを追跡するのに長い時間がかかる可能性があるということです.

または、より良い議論: 特定の要素 ID が変更されたときにすべてをリファクタリングするには長い時間がかかります。

この「ハック」の議論に対するいくつかの議論は何ですか? そして、その周りに良い解決策はありますか?

4

3 に答える 3

3

うーん。何よりもまずgetElementById、標準の DOM 関数です。また、必要なものを見つけるためにループしてからループするgetElementByIdよりもはるかに高速だと思います。getElementsByClassNameスクリプト$("#element-id")に .

もちろん、これはハッキングではないと言わざるを得ません。誰が考えたのかもわかりません。簡単な例を考えてみましょう:

<form id='my-form-name'>
  <input id='input-text' ... />
  ...
</form>

と言うdocument.forms[0]よりもずっと悪いと思います$('#my-form-name')。そして、言うことができるということは、それが何であれ、それ$('#my-form-name #input-text')よりもはるかに優れています。document.forms[0].children[0]

最後に、いつでも次のことができます。

var $someElement = $('#el-id'); 

そうすれば、IDを1か所にハードコーディングするだけで、コードを「リファクタリング」するには1つの文字列を変更する必要があります...

于 2012-04-11T19:54:50.137 に答える
1

getElementbyid [sic] または jQuery("#tagname") による要素の取得は「ハック」と見なされると言われました。

誰があなたにそれを言ったとしても、それは間違っています。getElementById「ハック」ではなく、組み込みの JavaScript 関数です。これは、ID で要素を取得する方法です。内部的には、jQuery は実行時にそれを使用しjQuery("#tagname")ます。ネイティブ DOM 関数は、jQuery の組み込み CSS エンジン (sizzle) よりもはるかに高速であり、ID で要素を取得するのが、要素を取得する最速の方法です。

引数はコンパイルされていないため、ばかげたタイプミスを追跡するのに長い時間がかかる可能性があるということです.

この議論がまったくわかりません。コンパイルされているかどうかに関係なく、ある場所を変更すると、他の場所も変更する必要があります。次の PHP コードを検討してください。

<?php
$name = "Joe";

echo $name;

に変更$nameするとどうなり$customerNameますか? ここで、コード内の「ばかげたタイプミス」を追跡する必要があります。

または、より良い議論: 特定の要素 ID が変更されたときにすべてをリファクタリングするには長い時間がかかります。

実際、これはより良い議論です。DOM ルックアップを 1 回実行してから、その変数を別の場所で使用できます。例えば:

var $content = $('#content');

$content.attr('rel', 'test'); // Use $content to edit the element

したがって、ID が変更された場合は$('#content')、別のものに変更するだけで機能します。

于 2012-04-11T20:04:09.513 に答える
1

あなたが個人的に問題を抱えていない限り、私はそれについて心配しません.

誰もが ID を使用して要素を識別します。ID を探すときのコードの作成と実行の両方が高速です。タイプミスやリファクタリングが心配な場合は、いつでも要素をオブジェクトに保存し、それをスクリプト全体で使用できます。

var tagname = $("#tagname");

でも、本当は気にしなくていいんです。それらの名前を変更するようになった場合は、いつでも自動検索と置換を使用できます。

于 2012-04-11T19:50:52.317 に答える