2017-08-17 11 views
1

オーバーフローする項目の数を右と左に戻すために、オーバーフローしていない最初と最後の要素をターゲットにする方法を探していますその前後に数えます)。私が最初に標的とし(この場合は3と8の)要素をオーバーフローしない続くだろうどのようにこのexempleで最初と最後の非オーバーフロー要素をターゲットにする

.container { 
 
    overflow: hidden; 
 
    width: 430px; 
 
    display: flex; 
 
    border: 2px solid green; 
 
} 
 

 
.inner { 
 
    height: 100px; 
 
    width: auto; 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    position: relative; 
 
    right: 145px 
 
} 
 

 
a { 
 
    display: inline-flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    width: 50px; 
 
    height: 50px; 
 
    border: 1px solid grey; 
 
    margin: 0 10px; 
 
}
<div class="container"> 
 
    <div class="inner"> 
 
    <a>1</a> 
 
    <a>2</a> 
 
    <a>3</a> 
 
    <a>4</a> 
 
    <a>5</a> 
 
    <a>6</a> 
 
    <a>7</a> 
 
    <a>8</a> 
 
    <a>9</a> 
 
    <a>10</a> 
 
    <a>11</a> 
 
    <a>12</a> 
 
    <a>13</a> 
 
    <a>14</a> 
 
    </div> 
 
</div>

$('.inner a:visible').last()$('.inner a:visible:last')のようなものを試しましたが、うまくいきませんでした。

ありがとうございます!

答えて

1

offset()、次にfilter()のうち、0より大きくて親の幅より大きく、最初と最後の要素を取ることができます。

var c = $('.container'); 
 
var cl = c.offset().left; 
 

 
$('a').filter(function() { 
 
    var xl = $(this).offset().left 
 
    return (cl - xl) < 0 
 
}).first().css('background', 'red') 
 

 
$('a').filter(function() { 
 
    var xl = $(this).offset().left 
 
    return xl < (cl + c.width()) 
 
}).last().css('background', 'red')
.container { 
 
    overflow: hidden; 
 
    width: 430px; 
 
    display: flex; 
 
    border: 2px solid green; 
 
    margin-left: 100px; 
 
} 
 

 
.inner { 
 
    height: 100px; 
 
    width: auto; 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    position: relative; 
 
    right: 145px; 
 
} 
 

 
a { 
 
    display: inline-flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    width: 50px; 
 
    height: 50px; 
 
    border: 1px solid grey; 
 
    margin: 0 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="inner"> 
 
    <a>1</a> 
 
    <a>2</a> 
 
    <a>3</a> 
 
    <a>4</a> 
 
    <a>5</a> 
 
    <a>6</a> 
 
    <a>7</a> 
 
    <a>8</a> 
 
    <a>9</a> 
 
    <a>10</a> 
 
    <a>11</a> 
 
    <a>12</a> 
 
    <a>13</a> 
 
    <a>14</a> 
 
    </div> 
 
</div>

+0

これは私が達成しようとしているものと私は非常に近くなっている、あなたの答えをいただき、ありがとうございます。しかし、私の問題は、コンテナではなくドキュメント全体からのオフセットを計算するように見えるため、最後の要素では機能していないようです(私は信じています)。私はこの機能にあまり慣れていませんが、文書の左側から始まって、設定された幅(コンテナ)の最後の要素を対象としているようです。したがって、選択した要素は、ページ上のコンテナの場所によって異なります。うまくいけば私の説明はあまり混乱しないので、必要に応じてスクリーンショットを追加することができます。 – eloism

+1

@eloismあなたは正しいです、更新された解決策を試してください。 –

+0

'a'要素の幅を計算に含める必要があるかもしれませんが、それを理解することができます。 –

関連する問題