diff --git a/cheerio/cheerio-tests.ts b/cheerio/cheerio-tests.ts index c02b1ed26..6cc9e6485 100644 --- a/cheerio/cheerio-tests.ts +++ b/cheerio/cheerio-tests.ts @@ -1,67 +1,294 @@ /// -import cheerio = require("cheerio"); +import cheerio = require('cheerio'); -cheerio(''); +/* + * LOADING + */ +let html = +``; -var $ = cheerio.load(""); -var $el = $('selector'); -var $multiEl = $('seletor', 'selector', 'selector'); +// Preferred Method +var $ = cheerio.load(html); +// Directly load element +cheerio(html); +cheerio('ul', html); +cheerio('li', 'ul', html); -$el.addClass("class").addClass("test"); -$el.hasClass("test"); -$el.removeClass("class").removeClass("test"); - -$el.attr('class'); -$el.attr('class', 'test'); -$el.removeAttr("class").removeAttr("test"); - -$el.find("ul").find("> li"); - -$el.parent().parent(); -$el.next().next(); -$el.prev().prev(); -$el.siblings().siblings(); - -$el.children().children(); -$el.children("li").children("a"); - -$el.children().each((index, element) => { - return $(element).find('t'); +$ = cheerio.load(html, { + normalizeWhitespace: true, + xmlMode: true }); -$el.children().map((index, element) => { - return $(element).find('t'); +$ = cheerio.load(html, { + normalizeWhitespace: true, + xmlMode: true, + decodeEntities: true, + lowercaseTags: true, + lowerCaseAttributeNames: true, + recognizeCDATA: true, + recognizeSelfClosing: true }); -$el.children().filter((index) => { - return $el.children().eq(index).find('t').length >= 0; -}); +/** + * Selectors + */ +var $el = $('.class'); +var $multiEl = $('selector', 'selector', 'selector'); -$el.filter('span').filter('li'); +/** + * Attributes + */ -$el.first().last().find('t'); - -$('div').eq(0).find('b'); - -$('#id').append("test html", "other html").find('a'); -$('#id').prepend("test html", "other html").find('a'); -$('#id').after("test html", "other html").find('a'); -$('#id').before("test html", "other html").find('a'); - -$el.remove('div').remove('a'); - -$('#id').replaceWith('some html').parent(); -$('#id').empty().parent(); - -$el.html(); -$el.html("").find('div'); - -$el.text(); -$el.text('some text'); - -$el.toArray(); -$el.clone().find('a').parent(); -$.root().find('a'); +// attr +$el.attr('id'); +$el.attr('id', 'favorite').html(); +// data $el.data(); +$el.data('apple-color'); +$el.data('kind', 'mac'); + +// val +$('input[type="text"]').val(); +$('input[type="text"]').val('test').html(); + +// removeAttr +$el.removeAttr('class').html(); + +// hasClass, addClass, removeClass, toggleClass +$el.addClass('class').addClass('test'); +$el.hasClass('test'); +$el.removeClass('class').removeClass('test'); +$el.addClass('red').removeClass().html(); +$el.toggleClass('fruit green red').html(); + +// is +$el.is('#id'); +$el.is($el); +$el.is(() => { + return true; +}); + +/** + * Forms + */ +// serializeArray +$('
').serializeArray(); + +/** + * Traversing + */ + // find +$el.find('li').length; +$el.find($('.apple')).length; + +// .parent([selector]) +$el.parent().attr('id'); +$el.parent('.class').attr('id'); + +// .parents([selector]) +$el.parents().length; +$el.parents('.class').length; + +// .parentsUntil([selector][,filter]) +$el.parentsUntil().length; +$el.parentsUntil('.class').length; + +// .closest(selector) +$el.closest(); +$el.closest('.class'); + +// .next([selector]) +$el.next().hasClass('class'); +$el.next('.class').hasClass('class'); + +// .nextAll([selector]) +$el.nextAll().length; +$el.nextAll('.class').length; + +// .nextUntil([selector], [filter]) +$el.nextUntil(); +$el.nextUntil('.class'); + +// .prev([selector]) +$el.prev().hasClass('class'); +$el.prev('.class').hasClass('class'); + +// .prevAll([selector]) +$el.prevAll().length; +$el.prevAll('.class').length; + +// .prevUntil([selector], [filter]) +$el.prevUntil(); +$el.prevUntil('.class'); + +// .slice( start, [end] ) +$el.slice(1).eq(0).text(); +$el.slice(1, 2).length; + +// .siblings([selector]) +$el.siblings().length; +$el.siblings('.class').length; + +// .children([selector]) +$el.children().length; +$el.children('.class').text(); + +// .contents() +$el.contents().length; + +// .each( function(index, element) ) +$el.each((i, el) => { + $(el).html(); +}); + +// .map( function(index, element) ) +$el.map((i, el) => { + return $(el).text(); +}).get().join(' '); + +// .filter +$ = cheerio.load(html); +$el.filter('.class').attr('class'); +$el.filter($('.class')).attr('class'); +$el.filter($('.class')[0]).attr('class'); + +$el.filter((i, el) => { + return $(el).attr('class') === 'class'; +}).attr('class'); + +// .not +$el.not('.class').length; +$el.not($('.class')).length; +$el.not($('.class')[0]).length; + +$el.not((i, el) => { + return $(el).attr('class') === 'class'; +}).length; + +// .has +$el.has('.class').attr('id'); +$el.has($el[0]).attr('id'); + +// .first() +$el.children().first().text(); + +// .last() +$el.children().last().text(); + +// .eq( i ) +$el.eq(0).text(); +$el.eq(-1).text(); + +// .get( [i] ) +$el.get(0).tagName; +$el.get().length; + +// .index() +// .index( selector ) +// .index( nodeOrSelection ) +$el.index(); +$el.index('li'); +$el.index($('#fruit, li')); + +// .end() +$el.eq(0).end().length; + +// .add +$el.add('.class').length + +// .addBack( [filter] ) +$el.eq(0).addBack().length +$el.eq(0).addBack('.class').length + +/** + * Manipulation + */ + +// .append( content, [content, ...] ) +$el.append('
  • Plum
  • ').html(); +$el.append('
  • Plum
  • ', '
  • Plum
  • ').html(); + +// .prepend( content, [content, ...] ) +$el.prepend('
  • Plum
  • ').html(); +$el.prepend('
  • Plum
  • ', '
  • Plum
  • ').html(); + +// .after( content, [content, ...] ) +$el.after('
  • Plum
  • ').html(); +$el.after('
  • Plum
  • ', '
  • Plum
  • ').html(); + +// .insertAfter( content ) +$('
  • Plum
  • ').insertAfter('.class').html(); + +// .before( content, [content, ...] ) +$el.before('
  • Plum
  • ').html(); +$el.before('
  • Plum
  • ', '
  • Plum
  • ').html(); + +// .insertBefore( content ) +$('
  • Plum
  • ').insertBefore('.class').html(); + +// .remove( [selector] ) +$el.remove().html(); +$el.remove('.class').html(); + +// .replaceWith( content ) +$el.replaceWith($('
  • Plum
  • ')).html(); + +// .empty() +$el.empty().html(); + +// .html( [htmlString] ) +$el.html(); +$el.html('
  • Mango
  • ').html(); + +// .text( [textString] ) +$el.text(); +$el.text('text'); + +// .wrap( content ) +// See https://github.com/cheeriojs/cheerio/issues/731 +// $el.wrap($('
    ')).html(); + +// .css +$el.css('width'); +$el.css(['width', 'height']); +$el.css('width', '50px'); + +/** + * Rendering + */ +$.html(); +$.html('.class'); +$.xml(); + +/** + * Miscellaneous + */ + +// .clone() #### +$el.clone().html(); + +/** + * Utilities + */ + +// $.root +$.root().append('').html(); + +// $.contains( container, contained ) +$.contains($el[0], $el[0]); + +// $.parseHTML( data [, context ] [, keepScripts ] ) +$.parseHTML(html); +$.parseHTML(html, null, true); + +/** + * Not in doc + */ +$el.toArray(); diff --git a/cheerio/cheerio.d.ts b/cheerio/cheerio.d.ts index bbd47810f..840cceef5 100644 --- a/cheerio/cheerio.d.ts +++ b/cheerio/cheerio.d.ts @@ -17,12 +17,17 @@ interface Cheerio { attr(name: string, value: any): Cheerio; data(): any; + data(name: string): any; + data(name: string, value: any): any; val(): string; val(value: string): Cheerio; removeAttr(name: string): Cheerio; + has(selector: string): Cheerio; + has(element: CheerioElement): Cheerio; + hasClass(className: string): boolean; addClass(classNames: string): Cheerio; @@ -41,6 +46,9 @@ interface Cheerio { is(selection: Cheerio): boolean; is(func: (index: number, element: CheerioElement) => boolean): boolean; + // Form + serializeArray(): {name: string, value: string}[]; + // Traversing find(selector: string): Cheerio; @@ -52,10 +60,12 @@ interface Cheerio { parentsUntil(element: CheerioElement, filter?: string): Cheerio; parentsUntil(element: Cheerio, filter?: string): Cheerio; + closest(): Cheerio; closest(selector: string): Cheerio; next(selector?: string): Cheerio; nextAll(): Cheerio; + nextAll(selector: string): Cheerio; nextUntil(selector?: string, filter?: string): Cheerio; nextUntil(element: CheerioElement, filter?: string): Cheerio; @@ -63,6 +73,7 @@ interface Cheerio { prev(selector?: string): Cheerio; prevAll(): Cheerio; + prevAll(selector: string): Cheerio; prevUntil(selector?: string, filter?: string): Cheerio; prevUntil(element: CheerioElement, filter?: string): Cheerio; @@ -83,15 +94,24 @@ interface Cheerio { filter(selection: Cheerio): Cheerio; filter(element: CheerioElement): Cheerio; filter(elements: CheerioElement[]): Cheerio; - filter(func: (index: number) => boolean): Cheerio; + filter(func: (index: number, element: CheerioElement) => boolean): Cheerio; + + not(selector: string): Cheerio; + not(selection: Cheerio): Cheerio; + not(element: CheerioElement): Cheerio; + not(func: (index: number, element: CheerioElement) => boolean): Cheerio; first(): Cheerio; last(): Cheerio; eq(index: number): Cheerio; - get(): Document[]; - get(index: number): Document; + get(): CheerioElement[]; + get(index: number): CheerioElement; + + index(): number; + index(selector: string): number; + index(selection: Cheerio): number; end(): Cheerio; @@ -101,6 +121,9 @@ interface Cheerio { add(elements: CheerioElement[]): Cheerio; add(selection: Cheerio): Cheerio; + addBack():Cheerio; + addBack(filter: string):Cheerio; + // Manipulation append(content: string, ...contents: any[]): Cheerio; @@ -118,11 +141,19 @@ interface Cheerio { after(content: Document[], ...contents: any[]): Cheerio; after(content: Cheerio, ...contents: any[]): Cheerio; + insertAfter(content: string): Cheerio; + insertAfter(content: Document): Cheerio; + insertAfter(content: Cheerio): Cheerio; + before(content: string, ...contents: any[]): Cheerio; before(content: Document, ...contents: any[]): Cheerio; before(content: Document[], ...contents: any[]): Cheerio; before(content: Cheerio, ...contents: any[]): Cheerio; + insertBefore(content: string): Cheerio; + insertBefore(content: Document): Cheerio; + insertBefore(content: Cheerio): Cheerio; + remove(selector?: string): Cheerio; replaceWith(content: string): Cheerio; @@ -138,6 +169,11 @@ interface Cheerio { text(): string; text(text: string): Cheerio; + // See https://github.com/cheeriojs/cheerio/issues/731 + /*wrap(content: string): Cheerio; + wrap(content: Document): Cheerio; + wrap(content: Cheerio): Cheerio;*/ + css(propertyName: string): string; css(propertyNames: string[]): string[]; css(propertyName: string, value: string): Cheerio; @@ -203,7 +239,7 @@ interface CheerioStatic extends CheerioSelector { interface CheerioElement { // Document References // Node Console - + tagName: string; type: string; name: string; attribs: Object; @@ -221,5 +257,5 @@ interface CheerioAPI extends CheerioSelector { declare var cheerio:CheerioAPI; declare module "cheerio" { - export = CheerioAPI; + export = cheerio; }