2013-04-17 80 views
2

我想将我的HTML文档中的每个元素的样式设置为“display:none;”,除了一个。我无法编辑HTML源文件。我使用Qt Webkit的尝试做到这一点,这是我到目前为止的代码:隐藏除一个div外的所有div(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"); 

然而,这隐藏了一切,包括canvas元素。

我该怎么做?

回答

1

这可能是由于“画布”的祖先具有“​​显示:无”的风格。以及包含在任何一个因此不显示任何内容, 我的猜测是,你可以通过家长这样的循环:

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

我可能是有点过的语法虽然。

+0

我想你的解决方案(我做编辑的东西,但:'QWebElement帆布= document.findFirst( “画布”); QWebElement父= canvas.parent(); 做{ parent.setAttribute( “风格”,“显示:内联“); 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