我使用可编辑的QWebView并在上面写一些文字。我想获取文本光标指向它的当前元素并进行一些更改。例如,文本光标位于<p>标记中,没有任何ID或类。我想获得此段并将其显示设置为例如。

如何获得没有任何ID或类的当前元素?

我尝试了:this.style.display="none"无效,但是当我尝试document.getElementsByTagName('p')[0].style.display="none"时有效。而且我不知道如何获取当前元素。

我只想使用javascript而不是jquery来做到这一点。而且没有任何点击或其他。这可能吗?我怎样才能做到这一点?

execCommand如何工作?例如execCommand justifyRight如何获取当前元素?

这是我的代码:

QWebFrame *frame = p->webView->page()->mainFrame();
QString js = QString("this.style.display='none'");
frame->evaluateJavaScript(js);


谢谢

最佳答案

对于可编辑的网页,理想情况下,我们希望能够随时询问QWebFrame插入符号中的QWebElement。然后,我们可以使用C ++代码调整此元素。

不幸的是,根据文档,没有提供这种方法。

无论如何,由于我们可以使用window.getSelection()访问用户选择或插入符号在DOM中的位置,因此Webkit的javascript中有一种解决方法。以下是一些代码,可在选择项上方找到最接近的<p>标记,并根据需要更改其样式:

  QString js=
  "  var node = window.getSelection().getRangeAt(0).startContainer;"
  "  while (node) {"
  "    if (node.nodeName.toUpperCase()=='P') {"
  "      node.style.display='none';"
  "      break;"
  "    }"
  "    node=node.parentNode;"
  "  }" ;

  QVariant res = page()->mainFrame()->evaluateJavaScript(js);


您可能需要对其进行概括,以将节点类型和样式作为参数,并可能对其进行一些测试(我不是JS专家),但是我相信原理是合理的。

07-24 19:07
查看更多