Подсчет и отображение последних сообщений в блоге в javascript - PullRequest
0 голосов
/ 13 сентября 2018

Что такое JavaScript, чтобы отображать только сообщения 3 и 4 в порядке ??? Кроме того, мне нужно, чтобы он был динамичным, поэтому, если я поставлю 5-й пост, он будет отображать только 4-й и 5-й посты ... Я думал о чем-то вроде функции даты или простого инкремента, но не могу понять это. Я новичок в javascript и пробовал разные вещи, но безрезультатно ... Заранее спасибо ...

 <!DOCTYPE html>
<html>
<body>

<div id="posts-div">
    <h1 class="post-title">post4</h1>
    <p class="post">post4</p>
</div>

<div id="posts-div">
    <h1 class="post-title">post3</h1>
    <p class="post">post3</p>
</div>

<div id="posts-div">
    <h1 class="post-title">post2</h1>
    <p class="post">post2</p>
</div>

<div id="posts-div">
    <h1 class="post-title">post1</h1>
    <p class="post">post1</p>
</div>

<script>
// ???
</script>

</body>
</html>

Ответы [ 4 ]

0 голосов
/ 13 сентября 2018

Как бы я не интерпретировал ваш вопрос, вам нужен способ:

  • показать только первые n элементов;
  • динамически добавляются новые элементы в начало списка сообщений;
  • при добавлении обновите видимые элементы.

Предполагается, что слегка измененная версия вашего кода исправляет проблему с идентификатором / классом и добавляет контейнер для всех сообщений (на этот раз с правильным идентификатором):

<!DOCTYPE html>
<html>
<body>

    <div id="posts-container">
        <div class="posts-div">
            <h1 class="post-title">post4</h1>
            <p class="post">post4</p>
        </div>

        <div class="posts-div">
            <h1 class="post-title">post3</h1>
            <p class="post">post3</p>
        </div>

        <div class="posts-div">
            <h1 class="post-title">post2</h1>
            <p class="post">post2</p>
        </div>

        <div class="posts-div">
            <h1 class="post-title">post1</h1>
            <p class="post">post1</p>
        </div>
    </div>

<script>
// ???
</script>

</body>
</html>

этот код поможет и дополнит и обновит видимость постов:

function showOnly(visible, query){
    var elements = document.querySelectorAll(query);
    for (var i = 0; i < elements.length; i++){
        if (i < visible - 1){
            elements[i].style.display = 'block';
        } else {
            elements[i].style.display = 'none';
        }
    }
}

function publishPost(element, visible){
    showOnly(visible, '#posts-container .posts-div')
    var elements = document.querySelectorAll('#posts-container .posts-div');
    element.style.display = 'block';
    if (elements.length > 0) {
        document.querySelector('#posts-container').insertBefore(element, elements[0]);
    } else {
        document.querySelector('#posts-container').appendChild(element);
    }
}

Функция showOnly (которая вызывается с количеством отображаемых элементов и строкой, идентифицирующей элементы с querySelectorAll) сделает только видимыми первые n элементов, идентифицированных строкой. При необходимости вы можете использовать его независимо от остальной части кода.

Функция publishPost, с другой стороны, строго зависит от приведенного выше измененного HTML-кода (чтобы использовать его в другом месте, вам необходимо настроить строки, передаваемые в querySelector и querySelectorAll). В качестве первого аргумента берется элемент, который должен быть опубликован, а количество элементов, которые должны быть видны как второй. Затем он обновляет список сообщений, добавляя к нему новый, а также обновляет список сообщений.

Это пример кода, который использует его:

var elDiv = document.createElement('div');
var elH1 = document.createElement('h1');
var elP = document.createElement('p');
elDiv.classList = 'posts-div';
elH1.classList = 'post-title';
elP.classList = 'post';
elH1.innerText = 'some title';
elP.innerText = 'some text for the post';
elDiv.appendChild(elH1).appendChild(elP);
publishPost(elDiv, 2);

showOnly

Эта функция начинается с получения списка элементов, видимость которых должна управляться:

var elements = document.querySelectorAll(query);

затем просматривает список и проверяет каждый элемент:

for (var i = 0; i < elements.length; i++){

если он должен быть видимым, для свойства style.display устанавливается значение 'block':

if (i < visible){
    elements[i].style.display = 'block';

в противном случае он устанавливается как «скрытый»:

else {
    elements[i].style.display = 'none';

publishPost

Эта функция начинается с показа только n-1 элементов (потому что для этого потребуется добавить новый видимый элемент в начало списка):

showOnly(visible - 1, '#posts-container .posts-div')

затем он получает текущие сообщения:

var elements = document.querySelector('#posts-container .posts-div');

делает новый элемент видимым:

element.style.display = 'block';

наконец, он добавляет элемент в начало списка (различный синтаксис зависит от того, пуст ли список):

if (elements.length > 0) {
    document.querySelector('#posts-container').insertBefore(element, elements[0]);
} else {
    document.querySelector('#posts-container').appendChild(element);
}
0 голосов
/ 13 сентября 2018

$('.posts-div:gt(1)').hide()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<body>

<div class="posts-div">
    <h1 class="post-title">post4</h1>
    <p class="post">post4</p>
</div>

<div class="posts-div">
    <h1 class="post-title">post3</h1>
    <p class="post">post3</p>
</div>

<div class="posts-div">
    <h1 class="post-title">post2</h1>
    <p class="post">post2</p>
</div>

<div class="posts-div">
    <h1 class="post-title">post1</h1>
    <p class="post">post1</p>
</div>

</body>
0 голосов
/ 13 сентября 2018

Попробуйте это:

<script>
document.addEventListener("DOMContentLoaded", function () {
    var allPosts = document.querySelectorAll(".posts-div");
    // This is the number of posts you want displayed
    var numberOfPostsToShow = 2;

    for (var i = 0; i < allPosts.length; i++) {

       if(i > numberOfPostsToShow - 1) {
           allPosts[i].style.display = "none";
       }

    }
});
</script>

Таким образом, вы будете выбирать, сколько сообщений вы хотите показывать с помощью переменной numberOfPostsToShow .

Дайте мне знать, если это сработало. С уважением.

0 голосов
/ 13 сентября 2018

Вам не нужен скрипт для этого.Вы можете сделать это с помощью CSS. Я немного изменил ваш html (сделал класс posts-div в html).

.posts-div{
  display:none;
}
.posts-div:nth-child(-n+2) {
   display:block;
}
<!DOCTYPE html>
<html>
<body>
  <div class="posts-div">
      <h1 class="post-title">post5</h1>
      <p class="post">post5</p>
  </div>
  <div class="posts-div">
      <h1 class="post-title">post4</h1>
      <p class="post">post4</p>
  </div>

  <div class="posts-div">
      <h1 class="post-title">post3</h1>
      <p class="post">post3</p>
  </div>

  <div class="posts-div">
      <h1 class="post-title">post2</h1>
      <p class="post">post2</p>
  </div>

  <div class="posts-div">
      <h1 class="post-title">post1</h1>
      <p class="post">post1</p>
  </div>

<script>
// ???
</script>

</body>
</html>

Вы также можете проверить это на JSfiddle .. https://jsfiddle.net/nimittshah/b5eL3ykx/6/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...