独自の要素IDの場合でも、要素がない一
-
03-07-2019 - |
質問
書いるGreaseMonkeyスクリプトという繰り返し処理を通じて集ます。各要素については親権者の方の同意が必要string IDが使用できますを参照する要素です。の要素自体がない id
属性やまだひさしをはじめとする変更は、元の文書を何でもできそうですDOM、自分のスクリプト).できない店舗には、この私のスクリプトが求めたい時は、GreaseMonkeyスクリプト自体がいなくなってしまったのです。あるもののようで"社内の"IDはブラウザ用ですか。Firefox-唯一のソリューションに通じるものクロス-ブラウザの解決にも応用可能その他のシナリオできます。
編集:
場合、GreaseMonkeyスクリプトは対象外となのか"、を参照の要素がします。 いGreaseMonkeyスクリプトが追加イベントへのDOMオブジェクト。できない店舗の参照配列またはその他においても同様のメカニズムが働いた時にイベント、火災の配列設計-デザインされているのでGreaseMonkeyスクリプトがいなくなってしまったのです。のニーズにお知らの要素を参照するスクリプトにした時のイベントにちなんで付けられました。●の要素であるというものではなく、どこまでが付属します。
できなだけ利用カスタムプロパティの要素かどうかが判別されます。 ありが、問題のルックアップ.思いのリゾートを繰り返し処理すべての要素の一つとするカスタムプロパティの設定を希望するidです。その作品だが、大きな文書でもできる非常に時間がかかります。僕も、ブラウザでのルックアップイサキです。
待ちきたりすることはできないの変更す。 できない変更、ソース文書が作れまDOMの変化を記述します。ん性の問題をもたらしていました。
することはできないのに使用閉鎖? Closusesかったのに、がったん.自分後ます。
るように聞こえるよ、という疑問への答えあり内部ブラウザIDを使ってみました?"と"ます"
解決 4
更新: クロージャはその答えになります。その後fiddlingであり、きっかけになるかもしれないと出なぜ閉鎖した当初、問題とかいいじゃないか初書きぐらい。トリッキーもの、閉鎖が多くなりますが繰り返し処理の要素で終わらせいたしかねますので、ご了の閉鎖を参照の同じ要素になります。例えば、これは当てはまりませんの仕事:
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var button = document.createElement("button");
button.addEventListener("click", function(ev) {
// do something with element here
}, false)
}
しかし、これは:
var buildListener = function(element) {
return function(ev) {
// do something with event here
};
};
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var button = document.createElement("button");
button.addEventListener("click", buildListener(element), false)
}
とにかく、しないを選択し解答がのった"と"どちらかと言えば:1)が内部Idを使用でき;2)を用いるべき止めました。こupvotedを最初にするかどうかであった内部Idはお勧めのIdの生成を、方言を抑止するためには、必要かのは助かります!
他のヒント
その答えは有効期限は、ありません内部idできます。オペラの家もSafari?) 支援 .sourceIndex
(変更の場合DOMながFirefoxもこの並べ替えができます。
シミュレーションすることができソース-インデックスを生成Xpathに指定されたノードまたはのインデックスの検索は、ノードから document.getElementsByTagName('*')
これからも常に戻要素源です。
すべてこのことは完全に静的ファイルのコースです。変更DOMはルックアップ.
何かわからないかでゆったりへの参照ノードがない(理論)の内部idのリスト。のいずれかの閉鎖や課題の作品はいかないようになりましたよ。または私を見落とさないよう?
閉鎖にかかるものと思われます。このようにきて正確に素子としても生き残る一部のシャッフリングのDOM.
例の方に知らない閉鎖:
var saved_element = findThatDOMNode();
document.body.onclick = function()
{
alert(saved_element); // it's still there!
}
の場合 また店舗では、クッキーをお勧めしま算XPathいているものに限られます(例えば徒歩のDOM計数前の兄弟が見つかるまでの要素とはどのようないように [@id=foo]/div[4]/p[2]/a
).
ノ はW3Cのソリューションがある。
少し戸惑の言葉のご質問-と言っている"必要な文字列ID[い]きに参照する要素の後にもうすことができない"を参照[your]スクリプトでできたら[す]必要となり、GreaseMonkeyスクリプト自体がいなくなってしまったのです。"
の場合はスクリプトのままであった範囲でしか参照しているのでは!
私を無視することに戸惑っよう願っていますので、お伝えすることを書いていGreasemonkeyスクリプトが多く、 ができ 変更のDOM要素とは認められていないためとして世界的に知られたIDです。このコードまでを取得するために使用する擬似独自の価値を一時使用:
var PseudoGuid = new (function() {
this.empty = "00000000-0000-0000-0000-000000000000";
this.GetNew = function() {
var fourChars = function() {
return (((1 + Math.random()) * 0x10000)|0).toString(16).substring(1).toUpperCase();
}
return (fourChars() + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + "-" + fourChars() + fourChars() + fourChars());
};
})();
// usage example:
var tempId = PseudoGuid.GetNew();
someDomElement.id = tempId;
この作品だから、帰れなかった私にとってだけ試験を実施し、Greasemonkeyスクリプトです。
更新: クロージャに自分としてハード-コアJavaScript開発者がわからないのだ なかった 考え方。:)
myDomElement; // some DOM element we want later reference to
someOtherDomElement.addEventListener("click", function(e) {
// because of the closure, here we have a reference to myDomElement
doSomething(myDomElement);
}, false);
現在、 myDomElement
一つの要素がすっからのご説明して周りの頃から思考を加えるためのIDで、何でも).
かられた場合には、例えようとしているので、もしやすくなるおとこのは来ない。
の場合 ができ 書のDOM(ていらっしゃることだと思いますしております。私はこのようになります:
機能を返し発生するID:
//(function () {
var idCounter = new Date().getTime();
function getId( node ) {
return (node.id) ? node.id : (node.id = 'tempIdPrefix_' + idCounter++ );
}
//})();
この取得IDの使いこなしガイド
var n = document.getElementById('someid');
getId(n); // returns "someid"
var n = document.getElementsByTagName('div')[1];
getId(n); // returns "tempIdPrefix_1224697942198"
このような心配はどのHTMLのような場合、サーバを手にしているんだと思います。
いない場合は変更のDOMまでバラバラになっても大丈夫ですべてによる物価連動順:
(試作 例)
myNodes = document.body.descendants()
alert(document.body.descendants()[1].innerHTML)
きすることによって、すべてのノードがそれぞれの独自のclassNameることができることを後を選択します。
設定できるid属性の値を計算した値です。機能もあります、試作の図書館がることができます。
http://www.prototypejs.org/api/element/identify
私の好きなjavascriptライブラリはjQuery.残念ながらjQueryな機能を持っていようにする。ただし、まだセットのid属性の値を生成する。
http://docs.jquery.com/Attributes/attr#keyfn
ここでは、スニペットからjQuery docsを設定するid divsに基づき位置のページをご覧ください:
$(document).ready(function(){
$("div").attr("id", function (arr) {
return "div-id" + arr;
});
});
も利用できますpguidページ-ユニークな識別子)独自の識別子を生成:
pguid = b9j.pguid.next() // A unique id (suitable for a DOM element)
// is generated
// Something like "b9j-pguid-20a9ff-0"
...
pguid = b9j.pguid.next() // Another unique one... "b9j-pguid-20a9ff-1"
// Build a custom generator
var sequence = new b9j.pguid.Sequence({ namespace: "frobozz" })
pguid = sequence.next() "frobozz-c861e1-0"
使用マウスおよび/または位置の特性要素を生成する独自のIDです。
き出すことができ、安定した識別子を指定するノードをDOMに以下の機能:
function getUniqueKeyForNode (targetNode) {
const pieces = ['doc'];
let node = targetNode;
while (node && node.parentNode) {
pieces.push(Array.prototype.indexOf.call(node.parentNode.childNodes, node));
node = node.parentNode
}
return pieces.reverse().join('/');
}
このことを識別などの doc/0
, doc/0/0
, doc/0/1
, doc/0/1/0
, doc/0/1/1
る構造になっています:
<div>
<div />
<div>
<div />
<div />
</div>
</div>
もあり少しoptimisations変更が可能となっておりますたとえば:
の
while
ループbreak
きることnode
属性をご存知できないと、例えば@id
ない
reverse()
のpieces
, 現在ではいくように、DOM構造のIDの発生から含めないで最初の
piece
doc
必要がない場合識別子の文書のノード保存の識別子のノードはそれを何らかの方法で再利用することに価値の子ノードをする必要性を回避するためにトラバースすべてのツリーです。
だ書くこれらの識別子を返XML、他の連結した文字の場合の属性だけ書き込みは制限されます。
Javascriptでは、添付のカスタムIDフィールドノード
if(node.id) {
node.myId = node.id;
} else {
node.myId = createId();
}
// store myId
奥高尾にひっそりと建つ料亭。るhackものでなければならないとすべてのノードidでご利用いただけます。もちろん、 document.getElementById()
んので注意します。
いえいただきました、問題と同様です。しかし、私はjQueryを使ったブラウザDOM環境です。
var objA=$("セレクタに一部のdom要素");var objB=$("セレクタのその他のdom要素");
if(objA[0]===objB[0]){ //!には、二つのオブジェクトが実際にポイントと同じdomノード }
OKありませんIDに関連するDOM要素に動きます。DOMはhierarchycal構造要素の主要な情報です。こうした観点から、できる 准データのDOM要素 とjQueryやjQLite.で解決できる問題るだけ"というニーズに対して結合するカスタムデータです。