Как удалять все признаки элемента используя pyQuery?

С целью знать функционирование pyquery (сходный книжный магазин в для Пайтона), я создал маленький рукописный шрифт, что то, что он делает (пока), состоит в том, чтобы добавлять некие классы CSS к таблице HTML согласно Framework, который показывает его ему (Bootstrap, Materialize):

import os
import sys

from pyquery import PyQuery as pq


BOOTSTRAP = 'bootstrap'
MATERIALIZE = 'materialize'
FRAMEWORKS = [
    BOOTSTRAP,
    MATERIALIZE
]


def show_available_frameworks():
    print 'Available frameworks:'
    for fw in FRAMEWORKS:
        print '- %s' % fw.title()

def show_usage():
    print 'Usage: prettify.py /path/to/template framework'


def prettify_html(template_path, framework):
    if not os.path.exists(template_path) or not os.path.isfile(template_path):
        print 'ERROR: template "%s" not found or invalid' % (template_path)
        return 1
    template_content = open(template_path).read()
    dom = pq(template_content)
    if framework == BOOTSTRAP:
        dom('table').add_class('table table-striped')
        dom('th').add_class('text-info')
        dom('th, td').add_class('text-center')
    elif framework == MATERIALIZE:
        dom('table').add_class('striped')
        dom('th').add_class('blue-text text-darken-2')
        dom('th, td').add_class('center-align')
    else:
        show_available_frameworks()
        return 1
    print dom.outer_html()
    return 0


if __name__ == '__main__':
    if len(sys.argv) < 3:
        show_usage()
        show_available_frameworks()
        sys.exit(1)
    sys.exit(prettify_html(sys.argv[1], sys.argv[2]))

Простой, ничто из другого мира. Потом, я создал следующий файл HTML с таблицей, у элементов которой нет признаков:

$ cat table.html
A B C D
1 2 3 4
10 20 30 40
100 200 300 400

Пытаясь с Bootstrap:

$ python prettify.py table.html bootstrap
A B C D
1 2 3 4
10 20 30 40
100 200 300 400

Пытаясь с Materialize:

$ python prettify.py table.html materialize
A B C D
1 2 3 4
10 20 30 40
100 200 300 400

То, чего я хочу добиться сейчас, состоит в том, чтобы у каждого из элементов не было никакого признака, а именно, если в моей функции я получаю таблицу со следующим:

Я хочу удалить все признаки и оставить ее "чистой" перед тем, как добавлять классы каждого Framework:

Я могу использовать метод remove_attr чтобы удалять признак, но он был бы должен знать, какие точно, и идея состоит в том, чтобы удалять все их: возможно делать это?

0
задан 21.12.2015, 06:01
2 ответа

Она soluciГіn состоит, как он упоминает @Gemasoft, в том, чтобы использовать API, чтобы создавать одну funciГіn, что позволил мне удалять признаки элемента.

то, что я сделал, состоит в том, чтобы использовать Fn, чтобы создавать ее funciГіn remove_all_attrs():

def remove_attribs(elem):
    for attribute in elem.attrib:
        del elem.attrib[attribute]

def prettify_html(template_path, framework):
    # ...
    fn = lambda: this.map(lambda i, el: remove_attribs(el))
    pq.fn.remove_all_attrs = fn
    # ...

С этой definiciГіn, тогда, возможный использовать ее таким образом:

dom('table').remove_all_attrs()

Или используя несколько элементов:

dom('table, thead, tbody, tr, th, td').remove_all_attrs()
1
ответ дан 24.11.2019, 15:04

Не возможно делать это с родной функциональностью.

В соответствии с documentaciГіn чиновник tendrГ-схвати, что повторять признаки для despuГ©s перемещать их.

2
ответ дан 24.11.2019, 15:04
  • 1
    Если, кажется, что он та и #250; nica сформируй, хотя todav и # 237; в не достижение делать это –  César 21.12.2015, 14:40