2016-08-09 4 views
0
var Xray = require('x-ray'); 
    var x = Xray(); 
    var a = false; 


    var url = "abcdeabcde"; 

      x(url, '.listing_risultati_prodotti .smcc-listing-risultati-prodotto', [{ 
       title: '.first-col a', 
       link: '.product-description [email protected]', 
       prezzo: '.second-col .ish-priceContainer-salePrice' 
      }])(function(err, obj) { 
       console.log(obj) 
      }) 

Запрос прямо сейчас возвращает два раза то же значение, потому что есть два div, которые соответствуют запросу.Два div с тем же именем класса, как я могу очистить только экземпляр первого класса?

[ { title: 'aaaa', 
    link: 'aaaa', 
    prezzo: 'aaaa' }, 
    { title: 'bbb', 
    link: 'bbb', 
    prezzo: ' bbb' }, 
    { title: 'ccc', 
    link: 'ccc', 
    prezzo: 'ccc' }, 
..... 
.... 
..... 
Then again 
{ title: 'aaaa', 
    link: 'aaaa', 
    prezzo: 'aaaa' }, 
    { title: 'bbb', 
    link: 'bbb', 
    prezzo: ' bbb' }, 
    { title: 'ccc', 
    link: 'ccc', 
    prezzo: 'ccc' }] 

и деление с имеют тот же путь селектора

#maincontent > div.category-section > div.render-category-products.products > div.listing_risultati_prodotti 

Они оба вложен внутри этого ID: #smcc_comp_common_wrapper

структура походит:

<body> 
#smcc_comp_common_wrapper 
... 
... 
#mainwrapper 
    ... 
    #maincontent > div.category-section > div.render-category-products.products > div.listing_risultati_prodotti 
    ... 
#mainwrapper 
    ... 
    #maincontent > div.category-section > div.render-category-products.products > div.listing_risultati_prodotti 
    ... 
... 
... 

я пытаюсь что-то вроде :

x(url, '.listing_risultati_prodotti:nth-of-type(1) .smcc-listing-risultati-prodotto', 

или же

x(url, ':nth-match(1 of #mainwrapper) .listing_risultati_prodotti .smcc-listing-risultati-prodotto',, но никто не работает

Возможен таргетинг только первый экземпляр класса?

+1

вы пытались с помощью ': первый-child' Я имею в виду как этот '.listing_risultati_prodotti: first-child' –

+0

Осторожно, но первый ребенок берет элемент, если он является первым ребенком o его родитель. Он не принимает первый элемент выбора. –

+0

@JacqueGoupil точно – Fen

ответ

0

это:

x(html, 'div#smcc_comp_common_wrapper div#mainwrapper:first-of-type div.listing_risultati_prodotti' 
    )(function(err, obj) { 
     console.log(obj) 
    }) 

также не должно быть несколько элементов с одинаковым идентификатором

0

Если какое-либо решение, которое использует селекторы (например, с использованием :first-child, как предложено Вайбхавом), как насчет того, чтобы просто разрезать результирующий массив объектов пополам?

function(err, obj) { 
    var half = obj.splice(obj.length/2); 
} 

Обратите внимание, что это своего рода обходной путь для вашей проблемы, однако это может быть приемлемым в данном конкретном случае.

+0

если я не найду другого решения, я собираюсь использовать этот, но, как вы сказали, это обходной путь – Fen