2013-04-17 3 views
2

Я хочу, чтобы стиль каждого элемента в моем документе HTML был «display: none;», за исключением одного. Я не могу редактировать исходный файл HTML. Я использую Qt Webkit, чтобы попытаться сделать это, и это мой код до сих пор:Скрыть все divs, но один (Qt Webkit)

QWebFrame *frame = webView->page()->mainFrame(); 

QWebElement document = frame->documentElement(); 
foreach (QWebElement element, document.findFirst("body").findAll("*")) 
    element.setAttribute("style", "display: none"); 


QWebElement canvas = document.findFirst("canvas"); 
canvas.setAttribute("style", "display: inline"); 

Однако это скрывает все, в том числе элемент холста.

Как я мог это сделать?

ответ

1

Возможно, это связано с тем, что предки «холста» имеют стиль «display: none»; а также поэтому не отображает ничего, содержащиеся в либо, Я думаю, что вы можете петлю через родителей, как это:

QWebElement parent = canvas.parent(); 
do{ 
    parent.setAttribute("style", "display: inline"); 
}while(parent!=null) 

Я мог бы быть немного не по синтаксису, хотя.

+0

Я попробовал ваше решение (я сделал что-то отредактировать, хотя: 'QWebElement холст = document.findFirst ("холст"); QWebElement родитель = canvas.parent(); сделать { parent.setAttribute ("стиль"," display: inline "); parent = parent.parent(); } while (& parent! = &body); canvas.setAttribute (" style "," display: inline "); это мой код. застрял в бесконечном цикле (очевидно, и родительский никогда не равен & body). – RaptorDotCpp

+0

Это потому, что вы сравниваете адреса переменных. Вы не можете это сделать. –

+0

Тогда как я могу установить хорошее условие для цикла? – RaptorDotCpp

1

Вы сказали, что хотите управлять видимостью всех элементов <div>. Для того, чтобы получить все из них, вы можете заменить следующий запрос к вашему foreach блоку:

document.findAll(QLatin1String("div") 

Предложения дано в другом ответе тоже правильно - вы должны убедиться, что родительский элемент <canvas> не сам установлен на display: none.

Смежные вопросы