2011-07-26 21 views
6

私はこのようなHTMLを持っている:選択HTML要素

… 
<div style="top: 252px; left: 54px;"></div> 
<div style="top: 252px; left: 162px;"></div> 
<div style="top: 288px; left: 108px;"></div> 
… 

私はこのようなリテラルJavaScriptのオブジェクトがあります。

var pos = { top: 252, left: 54 }; 

を私が持つ要素を選択しますオブジェクトリテラルが示す位置。位置はユニークなので、1つの要素だけが選択されます。

ありがとうございました。

+1

カスタムセレクタを作成するには、ここをクリックしてください。http://stackoverflow.com/questions/1180067/jquery-find-by-inline-css-attribute/1180106#1180106 – Rafay

+0

また、 .filter'を使ってフィルタリングを実装します( '.filter'の中で' .css'を使います)。 – pimvdb

+0

私は正しいソリューション+ jsfiddleサンプルを投稿しました。 – zatatatata

答えて

5

クレジットは元のポスターになります。

jQuery find by inline css attribute

関数 'はstyleEquals' であり、以下のように実施することができます。

jQuery.extend(jQuery.expr[':'], { 
    styleEquals: function(a, i, m){ 
     var styles = $(a).attr("style").split(" ") 
     var found = false; 
     for (var i = 0; i < styles.length; i++) { 
       if (styles[i]===m[3]) { 
         found = true; 
         break; 
       } 
     } 
     return found; 
    } 
}); 

次のような新しいjquery拡張機能を使用して、スタイル属性値で要素を検索できます。

$("div:styleEquals('top=252px'):styleEquals('left:54px')"); 
+0

このソリューションはうまくいきますので、私はそれを受け入れられた答えとして選びますが、私の問題では最終的にIDを使用しました。 – Darkry

5

私が言うことができるのはこれをしないことです!

divにユニークな位置スタイルを追加できる場合は、同時に簡単に識別子を追加できます。

この識別子を使用して、CSSの配置ではなく、JavaScriptの要素を選択します。

+2

もちろん、私はそれを行うことができます、私はちょうどcss値でこれを行う方法があるかどうか尋ねたいと思っていました。 – Darkry

+2

しかし、なぜあなたはしたいですか? CSSはスタイリング要素のためのものであり、それらを識別するものではありません!あなたが2つをミックスすると、あなたは潜在的なメンテナンスの悪夢を作り出しています! – BonyT

+0

私はなぜこれがゲームのようなものだったのか分かりました。何百もの要素が動的に作成されました。それぞれのすべてのポジションのために1つの別々のCSSクラスを作成するのは意味がありません。次に、何らかの方法で個々の要素を選択する必要があります。私はjQueryを使ってこれを行う方法を提案しました。 – knut

1

使用

function findElement (top, left) { 
    return target = $('div').filter(function() { 
     var div = $(this); 
     if (parseInt(div.css('top')) == top && parseInt(div.css('left')) == left) 
      return true; 
     return false; 
    }); 
} 

あなたはこれらのDIVを生成すると、jsfiddle sample

1

を参照してくださいユニークのid属性でそれらを割り当てます。次に、id属性を持つDIVオブジェクトを取得できます。

1

クラスまたはIDを指定し、class/idを使用して選択すると、はるかに高速になります。それ以外の場合は、すべてを見つけてCSS値でフィルタリングする必要があります。

2

あなたは箱から出してthe jQuery JavaScript libraryと、このようにそれを行うことができます。

var pos = { top: 252, left: 54 }; 
$('div[style*="top: ' + pos.top + 'px"][style*="left: ' + pos.left + 'px"]'); 

あなたは一貫して空白を使用して確認する必要があります。次のように入力した場合:

<div style="top:252px; left:54px;"></div> 

提案されたセレクタは機能しません。

例のコードを使用してstyle属性に他のCSSプロパティを追加することもできますが、順序は関係ありません。

<div style="left: 54px; background: gray; top: 252px;"></div> 
1

あなたは(スペースに注意を払う)スタイル属性の内容によって要素を選択することができます:

$('div[style*="top: 252px; left: 54px"]').css("color","red") 

Exampleここでは一例です。

しかしBonyTのように、値をidやクラスに入れるべきです。