2013-03-12 11 views
5

ページ上の各要素に対してunqiueセレクタを取得する必要があります。 DBにsel値を格納した後、私はその値を得ることができますし、単にユニークなセレクタjQueryを取得する

によって要素にアクセスし、そう

$(document).click(function(){ 
    var sel = getUniqueSel(this); 
}); 

:私はこのような何かをしたい要素をクリックたとえば

var el = $(sel);

私は変更することはできませんし、ページのHTML構造については何も知らないし、これは非効率的であるように、私は単純にすべての要素にユニークなIDの(使用してJS)を追加することはできません。

+1

なぜあなたはあなたがIDに興味のあるものを与えるカント..強調表示する内容に気づきますか?ちょっと興味があるんだけど?あなたは本当にページ上のすべてのオブジェクトに興味がありますか? – mplungjan

+0

http://stackoverflow.com/questions/5442767/returning-the-full-path-to-an-element – mplungjan

+0

@mplungjanページ上のすべてのクリックされた要素のセレクタを保存する:)、このスクリプトは多くのページに含まれています。 – Cristy

答えて

6

別のアプローチは、DOMツリーをさまよい、あなたが保存して、再びセレクタとして後でそれを使用することができます要素へのパスを作成することかもしれないが、トンであるが、これは役立つはずだと思います帽子は防弾ではないかもしれませんが、あなたが始めることができるかもしれません。

編集:利用可能

ちょうどJSBin上の例を訪問し、二回documentをクリックすると、今ではIDを返し、コメントでのご提案と回答を更新しました。 しかし

jQuery.fn.getPath = function() { 
    if (this.length != 1) throw 'Requires one element.'; 
    var path, node = this; 
    if (node[0].id) return "#" + node[0].id; 
    while (node.length) { 
     var realNode = node[0], 
      name = realNode.localName; 
     if (!name) break; 
     name = name.toLowerCase(); 
     var parent = node.parent(); 
     var siblings = parent.children(name); 
     if (siblings.length > 1) { 
      name += ':eq(' + siblings.index(realNode) + ')'; 
     } 
     path = name + (path ? '>' + path : ''); 
     node = parent; 
    } 
    return path; 
}; 
var sel; 
$(document) 
    .click(function (e, a) { 
    if (!sel) { 
     sel = $("#comment-21702402") 
      .getPath(); 
     alert("Path is: " + sel + ", hiding the Element -> Click again to highlight"); 
    } else { 
     $(sel) 
      .css("background-color", "yellow"); 
    } 
}); 
+0

私は 'ID'をチェックすることもできるので、divにIDが定義されていればIDをセレクタとして取得し、そうでなければパスを取得します。私はこれがいくつかのDBストレージを節約すると思います。 – Cristy

0

これを行う1つの方法は、クリックされた要素で得ることができるすべての情報を取得することです。あなたがクリックした要素である場合 :<div> I'm a div </div>

$(document).click(function(){ 
    var tagName = $(this).prev().prop('tagName'); 
    var attributes = {}; 
    if(this.length) { 
     $.each(this[0].attributes, function(index, attr) { 
      attributes[ attr.name ] = attr.value; 
     }); 
    } 
    var elText=$(this).html(); 
    saveToDB(tagName,attributes,elText); 
}); 

あなたが後であなたが持っているか、単に使用する属性を使用して要素を見つけることができますが、それをデータベースに保存するとき だから、例えばテキストとして保存することができます

$(tagName+'['+attribute+'="'+value+'"]:contains("'+elText+'")') 

は私が

+1

要素のコンテンツを保存すると、実際には効率が悪くなります。 – Cristy

関連する問題