Note that there are some explanatory texts on larger screens.

plurals
  1. POjQuery grid traversal methods
    primarykey
    data
    text
    <p>I'm making a grid-based game where I want the user to be able to click on each selectable block in the grid to make the adjacent(horizontal,vertical,diagonal) blocks selectable and that block a selected block.All selected blocks should stay selected.I'm using two different classes called selectable and selected to tell the difference.Only the adjacent blocks of the current selected block should be selectable.Right now I want all selectable elements that are not adjacent to the current(last) selected element to return to their default state.Something like this(dark blue is selected and light blue is selectable):</p> <p><img src="https://i.stack.imgur.com/GDDjJ.jpg" alt="enter image description here"></p> <p>I used some jQuery traversal methods but I'm stuck at a point and I can't figure out any efficient code.Please help!</p> <p>Fiddle: <a href="http://jsfiddle.net/3DHMd/2/" rel="nofollow noreferrer">http://jsfiddle.net/3DHMd/2/</a></p> <p>HTML:</p> <pre><code> &lt;div class="outer"&gt; &lt;div class="inner"&gt; &lt;div class="grid"&gt; &lt;div class="column" id="column1"&gt; &lt;div id="1" class="block"&gt;&lt;/div&gt; &lt;div id="6" class="block"&gt;&lt;/div&gt; &lt;div id="11" class="block"&gt;&lt;/div&gt; &lt;div id="16" class="block"&gt;&lt;/div&gt; &lt;div id="21" class="block"&gt;&lt;/div&gt; &lt;div id="26" class="block"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="column" id="column2"&gt; &lt;div id="2" class="block"&gt;&lt;/div&gt; &lt;div id="7" class="block"&gt;&lt;/div&gt; &lt;div id="12" class="block"&gt;&lt;/div&gt; &lt;div id="17" class="block"&gt;&lt;/div&gt; &lt;div id="22" class="block"&gt;&lt;/div&gt; &lt;div id="27" class="block"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="column" id="column3"&gt; &lt;div id="3" class="block"&gt;&lt;/div&gt; &lt;div id="8" class="block"&gt;&lt;/div&gt; &lt;div id="13" class="block"&gt;&lt;/div&gt; &lt;div id="18" class="block"&gt;&lt;/div&gt; &lt;div id="23" class="block"&gt;&lt;/div&gt; &lt;div id="28" class="block"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="column" id="column4"&gt; &lt;div id="4" class="block"&gt;&lt;/div&gt; &lt;div id="9" class="block"&gt;&lt;/div&gt; &lt;div id="14" class="block"&gt;&lt;/div&gt; &lt;div id="19" class="block"&gt;&lt;/div&gt; &lt;div id="24" class="block"&gt;&lt;/div&gt; &lt;div id="29" class="block"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="column" id="column5"&gt; &lt;div id="5" class="block"&gt;&lt;/div&gt; &lt;div id="10" class="block"&gt;&lt;/div&gt; &lt;div id="15" class="block"&gt;&lt;/div&gt; &lt;div id="20" class="block"&gt;&lt;/div&gt; &lt;div id="25" class="block"&gt;&lt;/div&gt; &lt;div id="30" class="block"&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; </code></pre> <p>CSS:</p> <pre><code> html,body{ width:100%; height:100%; margin:0 auto; cursor:default; } .outer { position: relative; display:table; width:100%; height:85.25%; background-color:#959595; } .inner { display:table-cell; text-align:center; width:100%; height:85.25%; } .grid{ margin-top: 2%; margin-right: auto; margin-left: auto; border:0.7em solid #778086; width:93%; height:90%; background-color: #B3B1B1; clear:both; } .column{ width:20%; height:100%; float: left; } .block { width:100%; height:16.15%; border: 0.1em solid #778086; text-align: center; font-size: 1.3em; font-family: 'Roboto', sans-serif; line-height: 2.8em; } .selected { background-color:#2976A2; color:#FFFFFF; } .selectable { cursor: pointer; cursor: hand; background-color:#8DBFC4; color:#FFFFFF; } </code></pre> <p>JS:</p> <pre><code> $('#1').addClass('selected'); $('#2,#6,#7').addClass('selectable'); $(document).on('click','.selectable',function() { $(this).toggleClass('selected').toggleClass('selectable'); var ind=$(this).index(); $(this).prev().toggleClass('selectable'); $(this).next().toggleClass('selectable'); if (ind!=0) { $(this).parent().prev().children().eq(ind-1).toggleClass('selectable'); $(this).parent().next().children().eq(ind-1).toggleClass('selectable'); } $(this).parent().prev().children().eq(ind).toggleClass('selectable'); $(this).parent().next().children().eq(ind).toggleClass('selectable'); $(this).parent().prev().children().eq(ind+1).toggleClass('selectable'); $(this).parent().next().children().eq(ind+1).toggleClass('selectable'); $(this).parents().children('.selected.selectable').removeClass('selectable'); $(this).parents().siblings().children('.selected.selectable').removeClass('selectable'); }); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload