jQuery: список добавлен без отображения маркеров - PullRequest
1 голос
/ 27 апреля 2010

У меня есть следующий HTML:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <span>not so important</span>
  <span title="some specific text"><img src="/img/some.gif" /></span>
  <span title="more specific text">important 1</span>
  <span title="more specific text">important 2</span>
  <span title="more specific text">important 3</span>
  <span title="more specific text"><img src="/img/some.gif" /></span>
  <ul>
    <li>example 1</li>
    <li>example 2</li>
    <li>example 3</li>
  <ul>
  <script>
    var ul = $('body').append($('<ul>'));
    $("span[title*='specific text']")
        .contents()
        .filter(function(){ return $(this).nodeType != 1; })
        .each(function(){
            ul.append($('<li>' + $(this).text() + '</li>'));
        })
  </script>
</body>
</html>

Я хочу получить текст в пределах 'span', атрибут заголовка которого содержит «определенный текст», в данном случае «важный 1», «важный 2» и «важный 3». Затем я хочу перечислить их ниже, как пример. Однако пули не появляются, почему это так? Любые советы будут оценены!

РЕДАКТИРОВАТЬ: http://jsfiddle.net/XTqjC/3/ это код, который делает то, что мне нужно сделать. Спасибо Глену и Мео

Ответы [ 2 ]

4 голосов
/ 27 апреля 2010

В вашем примере вы не закрыли <ul> должным образом (отсутствует косая черта). Это ошибка копирования + вставки или в вашем коде?

Редактировать: И вам нужно рекомендуется использовать точку с запятой после каждого () (см. Комментарии):

.each(function(){
  ul.append('<li>' + $(this).text() + '</li>');
});

Попробуйте следующее:

var newUL = $('<ul/>');    //due credit to meo (see below)
$('body').append(newUL);
$("span[title*='specific text']")
    .contents()
    .filter(function(){ return $(this).nodeType != 1; })
    .each(function(){
        $("body ul").append('<li>' + $(this).text() + '</li>');
    });

Конечно, $(this).text() не позволит вам поместить <img> в <li> s. Таким образом, вы получите пустой <li></li> для каждого. Это можно исправить следующим образом:

.each(function(){
  if ($(this).text().trim() != "") {
    $("body ul").append('<li>' + $(this).text() + '</li>');
  }
});
2 голосов
/ 27 апреля 2010

Я исправил твой код. У вас были некоторые ошибки:

http://jsfiddle.net/XTqjC/2/

вот моя версия:

var ul = $('<ul/>');
$('body').append(ul)
$("span[title*='specific text']")
    .contents() // you actually don't need contents()
    .filter(function(){ return $(this).nodeType != 1; })
    .each(function(){
        ul.append('<li>' + $(this).text() + '</li>');
    })

когда вы делаете это: var ul = $('body').append($('<ul>'));

переменная ul содержит тело, и ваш li там не добавляется к UL, а тело. и когда вы используете append, вам не нужно ставить $() вокруг

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