2016-11-02 3 views
3

私は以下のようになりdiv要素のリストを持っている:私は、グリッド上でこれらの束を持って、私のFLOODFILLアルゴリズムの一部として、私は私のようlefttopによって隣接するグリッドを選択したいCSSの 'left'属性と 'top'属性の両方でdiv要素を見つける方法はありますか?

<div class="blockattribute" id="1" style="background-color: rgb(217, 217, 217); left: 0px; top: 0px;"></div> 

をx座標とy座標。これまでのところ、私はこれをどのように動作させるかを理解できないようです。誰かがこれを達成する方法についての推奨を持っていますか?私はこれが近いと思いますが、私はこのエラーを取得する

$("div['style=left: 0px; top:0px;']"); 

jquery.min.js:2 Uncaught Error: Syntax error, unrecognized expression: div['style=left: 0px; top:0px;'] 
+0

[this](http://stackoverflow.com/a/11396681/1627271)が役に立ちます。 – choz

+0

こんにちは@choz、リンクありがとうございますが、これは私が探しているものではありません。メソッドから情報を取得することができました。結果は次のとおりです。 'block1 [0] .getBoundingClientRect();' 'ClientRect {top:8、right:306、bottom:28、left:286、 width:20 ...} ' 隣接する正方形(右、左、上、下)を見つけたいときに、ピクセルを追加して左に置いて要素を取得できるようにするために、そこから。 –

+0

私は自分の答えを追加しましたが、私はそれがきれいだと思うので、 'filter'関数を使ってEvanのものと一緒に行くことを提案したいと思います。 – choz

答えて

-1

まず、コード$("div['style=left: 0px; top:0px;']");は構文上無効です。言われていること

$('div[style="left: 0px; top:0px;"]'); 

あなたのインラインスタイルが正確に一致する必要があろうから、それはまだあなたの望ましい結果を得ることはありません。これだけのような属性値の周りに引用符を必要とします。

もう少し近づけるには、ワイルドカード属性セレクタを使ってこのようなインラインスタイルの一部を得ることができますが、実際には非常に厄介であり、単一の空白がこれを失敗させるほどです。 https://css-tricks.com/attribute-selectors/#rel-anywhere:ここでは、この上もう少し

$('div[style*="left: 0px; top: 0px"]').html('test345');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="blockattribute" id="1" style="background-color: rgb(217, 217, 217); left: 0px; top: 0px;">test 123</div>

+1

実際には動作するはずですが、 'left'と'top'宣言? –

+0

divを 'blockattribute'に置き換えました。私はdivを動作させました。 –

+0

@KodosJohnson - この場合は失敗します。私が言ったように、それは非常に精巧で不安定になるだろう。一方、あなたのスタイルが非常に予測可能な場合、それはまだ機能します。 – billynoah

3

どのようなものについて:

$(".blockattribute").filter(function(ind,el){return $(el).offset().left == your_value && $(el).offset().top == your_value}) 
私は次のセレクタを試してみましたstackoverflowの質問から

、またはCSS値の使用をご希望の場合は、

$(".blockattribute").filter(function(ind,el){return $(el).css("left") == your_value+"px" && $(el).css("top") == your_value2+"px"}) 
+0

ちょっとエヴァン、私はあなたの答えが好きでしたが、 'your_value'パーツで' 20'や '0'のようなサンプル座標を置こうとしましたが、空の配列があります。また、私は '20px'と' 0px 'を試しましたが、まだ何も得ていません。何か不足していますか? –

+0

'.offset()。top'と' .offset()。left'はドキュメントに対する座標を計算します。私は '.css( 'top')'と '.css( 'left')'を使うほうが良いと思います。 OPはトップと左のcssプロパティ値について質問しているので。 –

+0

@KodosJohnson個人的には、 'css'よりも' offset() 'を使いたいと思います。 jqueryは[getBoundingClientRect]を使用して実装しているため、[この回答]に基づいた正しいアプローチです(http://stackoverflow.com/questions/442404/retrieve-the-position-xy-of-an-html-element/11396681#11396681) – choz

2

あなたはそれを間違って選択しています。これを達成する1つの方法は、divsを繰り返し、そのlefttopの値を確認することです。

$(function() { 
 
    var selectDiv = function(left, top) { 
 
    var $arrDiv = []; 
 
    $('div.blockattribute').each(function(i, v) { 
 
     var $div = $(v); 
 
     $arrDiv.push($div); 
 
    }); 
 

 
    for (var i = 0; i < $arrDiv.length; i++) { 
 
     var $div = $arrDiv[i]; 
 
     var offset = $div.offset(); 
 
     if (offset.left === left && offset.top === top) { 
 
     return $div; 
 
     } 
 
    } 
 
    
 
    return null; 
 
    } 
 
    
 
    var $selectedDiv = selectDiv(20, 20); 
 
    console.log($selectedDiv.attr('id')); 
 
});
.blockattribute { 
 
    width: 20px; 
 
    height: 20px; 
 
    display: block; 
 
    position: absolute; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="blockattribute" id="1" style="background-color: rgb(217, 217, 217); left: 0px; top: 0px;"></div> 
 
<div class="blockattribute" id="2" style="background-color: rgb(17, 17, 17); left: 20px; top: 20px;"></div> 
 
<div class="blockattribute" id="3" style="background-color: rgb(121, 121, 121); left: 40px; top: 40px;"></div>

注:これよりクリーンなソリューションを持っているエヴァンの答えをチェックしてください。

関連する問題