2015-05-26 3 views
0

Я не могу объяснить, что я пытаюсь делать словами так же четко, как HTML-код с ожидаемыми результатами. Но подытожить то, что я пытаюсь сделать, это получить все значения параметров элемента аукциона eBay, используя jquery. Для условия Item код jquery даже не вводит div для проверки текста, так как он не нашел никакого текста перед ним.Получить первый видимый текст из нескольких элементов вложенных дочерних элементов в jQuery

Мне было предложено использовать этот код, который не работает должным образом.

$("td").contents().filter(function(){ 
    return this.nodeType == Node.TEXT_NODE; 
})[0].nodeValue 

В любом случае, здесь приведен код HTML из 3-х предметов.

<td width="50.0%"> 
    <h2 itemprop="brand" itemscope="itemscope" itemtype="http://schema.org/Brand"><span itemprop="name">Unbranded</span></h2> 
</td> 

<td width="50.0%"> 
    <span>China</span> 
</td> 

<td width="50.0%"> 
    <!-- ITEM CONDITION --> 
    <!-- If Attribute is having hidden text/link  --> 
    <div aria-live="polite">             New: <span id="vi-cond-addl-info">A brand-new, unused, unopened, undamaged item in its original packaging (where packaging is </span> 
    <span id="hiddenContent" class="u-dspn" aria-expanded="false" > 
                      applicable). Packaging should be the same as what is found in a retail store, unless the item is handmade or was packaged by the manufacturer in non-retail packaging, such as an unprinted box or plastic bag. See the seller's listing for full details.<a href="http://pages.ebay.com/help/sell/contextual/condition_1.html" target="_blank" class="infoLink u-nowrap" > 
                        See all condition definitions<b class="g-hdn">- opens in a new window or tab</b></a> 
                      </span> 

                     <!-- TODO: remove hardcoded ID --> 
                     <span id="readFull" class="infoLink u-nowrap"> 
                      ... <a href="javascript:;">Read more<b class="g-hdn">about the condition</b></a>  
                     </span> 
                    </div> 
                 <!-- </td> --> 
</td> 

Выходы должны быть:

  1. Unbranded
  2. Китай
  3. новые (Может быть Новое: так как он чувствует себя невозможно)

Найдено решение, которое частично работает только не может понять, как это сделать для каждого td.

var first_line = $("#element") 
       .contents() 
       .filter(function() { 
        return $.trim(this.innerHTML||this.data); 
       }) 
        .first().text(); 

Вот моя лучшая попытка, которая не работает

$('td').each(function() { 
    alert(
     $(this).contents() 
       .filter(function() { 
       return $.trim(this.innerHTML||this.data); 
       }) 
       .first() 
       .text() 
    ); 
}); 

ответ

1

Используйте этот код,

$('table td').each(function() { 
 
    var textVal = ($.trim($(this).text()).split(' ')); 
 
    alert(textVal[0]); 
 
    });

+0

если вы хотите получить текст в определенной таблице, тогда добавьте 'table.className' или 'table # IDtext' – Pradeep

+0

Мне это нравится, потому что я не понимаю в верхнем ответе, почему вам нужно использовать 2 !! (НЕ операторы)? это шутка? и это коротко. – SSpoke

1

Этот вид работ:

var i = 0; 
$('td').each(function() { 
    if (i < 2) { 
     alert($(this).contents().text()); 

    } else { 
     alert($(this).text().split(':')[0]); 
    } 
    i++; 
}); 
+0

ничего не могу обернуть это HTML вид источника Пытаюсь лома. Решение, которое я опубликовал после выходов, работает на всех 3, я просто не могу его закодировать. На самом деле он не обнаруживает Новый. и это не сработало, потому что оно не было обернуто в

http://jsfiddle.net/mj98r571/ – SSpoke

+0

Отредактировав ответ, я не знаю, действительно ли его действие, но оно работало на вашей скрипке, по крайней мере, получило 3 слова: B –

0

Используйте #element часть, чтобы захватить группу значений для фильтрации по одному за раз:

var each_line = $("#element"); 
each_line.each(function() { 
    $(this).contents() 
       .filter(function() { 
        return $.trim(this.innerHTML||this.data); 
       }) 
        .first().text(); 
}); 

EDIT:

Хммм ... попробовать новые на себе, а затем посмотреть на остальных:

$('td').each(function() { 
 
    var newItem = $.trim($('td > div').childNodes[0]); 
 
    alert(
 
     $(this).contents() 
 
       .filter(function() { 
 
        return $.trim(this.innerHTML||this.data||newItem); 
 
       }) 
 
       .first() 
 
       .text() 
 
    ); 
 
});
<table> 
 
<td width="50.0%"> 
 
    <h2 itemprop="brand" itemscope="itemscope" itemtype="http://schema.org/Brand"><span itemprop="name">Unbranded</span></h2> 
 
</td> 
 

 
<td width="50.0%"> 
 
    <span>China</span> 
 
</td> 
 

 
<td width="50.0%"> 
 
    <!-- ITEM CONDITION --> 
 
    <!-- If Attribute is having hidden text/link  --> 
 
    <div aria-live="polite">             New: <span id="vi-cond-addl-info">A brand-new, unused, unopened, undamaged item in its original packaging (where packaging is </span> 
 
    <span id="hiddenContent" class="u-dspn" aria-expanded="false" > 
 
                      applicable). Packaging should be the same as what is found in a retail store, unless the item is handmade or was packaged by the manufacturer in non-retail packaging, such as an unprinted box or plastic bag. See the seller's listing for full details.<a href="http://pages.ebay.com/help/sell/contextual/condition_1.html" target="_blank" class="infoLink u-nowrap" > 
 
                        See all condition definitions<b class="g-hdn">- opens in a new window or tab</b></a> 
 
                      </span> 
 

 
                     <!-- TODO: remove hardcoded ID --> 
 
                     <span id="readFull" class="infoLink u-nowrap"> 
 
                      ... <a href="javascript:;">Read more<b class="g-hdn">about the condition</b></a>  
 
                     </span> 
 
                    </div> 
 
                 <!-- </td> --> 
 
</td> 
 
</table>

+0

ya Я получил это далеко, но он все еще не обнаруживает New: http://jsfiddle.net/mj98r571/ – SSpoke

2

попробовать это:

$('td').each (function() { 
    var currenttd = $(this).children(); 
    var first_line = $(currenttd) 
        .contents() 
        .filter(function() { 
         return !!$.trim(this.innerHTML || this.data); 
        }) 
        .first(); 
    alert(first_line.text().trim()); 
}); 

working fiddle