CsQuery: как перебрать все элементы?

Мне нужно реализовать функцию, которая возвращает первый элемент с атрибутом Id, который содержит определенную строку.

в HAP я реализовал это следующим образом:

    protected HtmlNode GetElementByIdPattern(string pattern)
    {
        return doc
            .DocumentNode
            .Descendants()
            .FirstOrDefault(e => e.Attributes["id"] != null && e.Attributes["id"].Value.Contains(pattern));
    }

Как перебрать все элементы в CsQuery?


person Nizar Blond    schedule 03.01.2014    source источник
comment
Вы используете оператор, который специально захватывает один результат. Есть только один результат. Если вам нужны все результаты, не используйте оператор, который просто захватывает один результат...   -  person Servy    schedule 03.01.2014
comment
о каком операторе идет речь? это HAP, не обращайте на это внимания. Мне нужен эквивалент .Descendants()   -  person Nizar Blond    schedule 03.01.2014


Ответы (2)


Решение:

    protected static CQ GetElementByIdPattern(CQ doc, string contains)
    {
        string select = string.Format("*[id*={0}]", contains);
        return doc.Select(select).First();
    }

На основе синтаксиса jQuery: $('[id=contains]: first')

person Nizar Blond    schedule 04.01.2014

 function CQ test(string contains, string selector)
 {
    CsQuery.CQ page="<div id="test first"></div>";
    return page[selector+"[id*="+contains+"]:first"];
 }

Он вернет объект CQ, которым вы можете манипулировать по своему усмотрению.

person nazarkin659    schedule 04.01.2014
comment
моя проблема в том, что я хочу, чтобы он не зависел от селектора. что означает любой селектор с id*=+contains+ - person Nizar Blond; 04.01.2014
comment
Я не понял, что вы имеете в виду под своим последним комментарием. - person nazarkin659; 06.01.2014