JQuery: найти последний компонент в строке [дубликат]

Используйте getResources (). getIdentifier () из вашего Context (например, Activity ), но, пожалуйста, оставьте результат, если вы будете использовать это не один раз. getIdentifier () реализован на ресурсах .

Например:

  int drawableId = getResources (). getIdentifier  («foo» + index, «drawable», getPackageName ());   

вернет значение R.drawable.fooN , где N - это число, указанное индексом .

Для получения дополнительной информации см. этот и этот и этот .

3
задан mskfisher 17 May 2012 в 18:15
поделиться

5 ответов

Вот пример, который делает то, что вы хотите. Я упростил ваш код, поэтому вам не нужно вручную идентифицировать каждую запись и предварительный просмотр.

http://jsfiddle.net/jqmPc/1/

Это немного сложно. Дайте мне знать, если у вас есть вопросы.

В основном, когда размер окна изменяется, скрипт проходит и находит первый просмотр в каждой строке, находя предварительный просмотр с тем же самым левым смещением, что и самый первый. Затем он добавляет класс last в запись до (предыдущая строка) и класс first для этого предварительного просмотра. Я делаю css clear: left на обоих из них, чтобы все обертывалось нормально, когда записи открываются.

Я сделал ваш код общим, без идентификаторов:

<div class="preview">
    <p>Some preview text <a class="trigger" href="#">&hellip;</a></p>
</div>

<div class="entry">
  <div class="close_button">
    <a class="close" href="#">&times;</a>
  </div>
  <p>Some content text.</p>
</div>

Это не делает вас придется писать один и тот же код снова и снова.

Скрипт open / close:

 $('.trigger').click(function() {
    $('.openEntry').slideUp(800); // Close the open entry
    var preview = $(this).closest('.preview');  // Grab the parent of the link

    // Now, clone the entry and stick it after the "last" item on this row:
    preview.next('.entry').clone().addClass('openEntry').insertAfter(preview.nextAll('.last:first')).slideDown(800);
});

// Use "on()" here, because the "openEntry" is dynamically added 
// (and it's good practice anyway)
$('body').on('click', '.close', function() {
    // Close and remove the cloned entry
    $('.openEntry').slideUp(800).remove();
});

Это может быть упрощено немного, я уверен, особенно если вы были готовы переформатируйте html немного больше, вставив запись внутри элемента предварительного просмотра (но все же скрытый). Вот немного более простая версия, с измененным html:

http://jsfiddle.net/jqmPc/2/

(Я также окрашиваю первый и последний элемент на линии, чтобы вы могли видеть, что происходит)

3
ответ дан Jeff B 15 August 2018 в 21:09
поделиться
  • 1
    Большое вам спасибо, Джефф, это именно то, что я искал. Я в основном понимаю, что происходит там, но почему-то не может заставить его работать вживую на моем сайте: записи не скрыты, как предполагалось. У вас есть идея, в чем проблема? Я проверял все классы и т. Д., Но что-то кажется недостающим. Вот мои ссылки на сайт тестирования и HTML . – Jens Draser-Schieb 26 March 2012 в 11:49
  • 2
    Вы должны добавить display: none в свой класс новостей в своей таблице стилей. – Jeff B 26 March 2012 в 17:58

Вы можете просто получить последний div в массиве после вызова getElementsByTagName.

var divArray = wrapperDiv.getElementsByTagName("div");
if(divArray.length > 0)
    var lastDiv = divArray[divArray.length-1];
else
    console.log("Empty!");
0
ответ дан Jeffrey Sweeney 15 August 2018 в 21:09
поделиться
  • 1
    Спасибо, Джеффри! Не уверен, что что-то не хватает, но я не могу заставить это работать должным образом. Если я скопирую это перед jQuery slideDown, slideDown больше не будет работать. Если я его потом скопирую, ничего не произойдет. Я что-то пропускаю? – Jens Draser-Schieb 23 March 2012 в 23:41
  • 2
    wrapperDiv не существует; Я просто сделал эту переменную, потому что не был уверен, какой div вы использовали, чтобы содержать другие div. – Jeffrey Sweeney 23 March 2012 в 23:44

У меня такая же проблема, как у вас, и я перенаправлен на этот вопрос. Но я думаю, что ответ слишком сложный для моей потребности. Поэтому я сделал свой собственный путь. Предположительно, вы получаете свой список из JSON, вы можете это сделать:

product[0] = {id: "name1", text: "text1"}
product[1] = {id: "name2", text: "text2"}
product[2] = {id: "name3", text: "text3"}

private getLastElement(id, products) {
    const getTop = (id) => $("#" + id).position().top;
    let itemPos = getTop(id);
    let itemIndex = products.map(x => x.id).indexOf(id);
    let lastID = itemIndex;
    while (lastID < products.length - 1) {
        if (getTop(products[lastID + 1].id) > itemPos) break;
        lastID++;
    }
    return products[lastID].id;
}

Но вы также можете узнать, собирая все идентификаторы внутри вашей обертки.

Он работает путем сканирования следующей позиции строки id и возвращает последний идентификатор той же строки.

0
ответ дан Magician 15 August 2018 в 21:09
поделиться
$([1,2]).each(function(idx,el) {
 $("#entry" + el).hide().insertAfter("div.entry:last");
 $("#trigger" + el).click(function() {
     $("#entry" + el).slideDown('800');
 });   
 $("#close" + el).click(function() {
     $("#entry" + el).slideUp('800');
 });            
});​

http://jsfiddle.net/yDcKu/11/

0
ответ дан Malk 15 August 2018 в 21:09
поделиться
  • 1
    Спасибо, Малк. Как я могу использовать это, если я не знаю, сколько там есть div? В вашем примере предполагается, что существуют div с идентификаторами 1 и 2, но окончательный контент будет генерироваться динамически, поэтому я не могу быть уверен в количестве div. Кроме того, что-то важное отсутствует: если у меня есть, например, 9 divs, и если ширина браузера разрешает 3 divs каждой строки И если активированный предварительный просмотр находится в строке второй, я хочу, чтобы последний div в буксировке строк получил конкретный идентификатор. – Jens Draser-Schieb 23 March 2012 в 23:38

Я не могу правильно понять ваш вопрос, но если вы хотите узнать последний элемент div в документе, вы можете сделать что-то вроде этого

$("div:last")

, так что это даст вам последний div документа

Ссылка:

http://api.jquery.com/last-selector/

0
ответ дан Saket Patel 15 August 2018 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: