【问题标题】:Trying to replace contents of a Div, with no luck尝试替换 Div 的内容,但没有运气
【发布时间】:2011-02-23 07:55:06
【问题描述】:

我尝试使用 Dom 模型,但运气不佳,getElementByID 对我不起作用。

我不喜欢使用正则表达式,但不知道还能做什么。

这个想法是用新的<div id="content_div"> NEW ALL SORTS HERE </div> 替换<div id="content_div"> all sorts </div>,并在字符串中保留它之前或之后的任何内容。

该字符串是部分 HTML 字符串,更具体地说是来自 wordpress Posts DB。

有什么想法吗?

更新:我标记了这个问题 PHP,但可能应该提到我只在寻找 PHP 解决方案。

更新:代码示例

$content = ($wpdb->get_var( "SELECT `post_content` FROM $wpdb->posts WHERE ID = {$article[post_id]}" ));

$doc = new DOMDocument();
$doc->validateOnParse = true; 
$doc->loadHTMLFile($content);   
$element = $doc->getElementById('div_to_edit');

所以我尝试了很多代码,这就是我目前所得到的,可能不正确,但我已经破解了一段时间了。

【问题讨论】:

  • 为了使用getElementById,您需要链接到文档的正确DTD 或XSD - 您的主文档是否有Doctype?此外,您目前如何创建和尝试替换元素?
  • 您能否详细说明“getElementByID 对我不起作用”。 ?它应该做。或者您可以使用原型或 jquery 之类的 javascript 库来更轻松地访问 DOM。
  • document.getElementById 你用 getElementById 打错了吗
  • 您是否尝试过在文档上将 validateOnParse-field 设置为 true? $doc->validateOnParse = true;这应该在调用 getElementById() 之前完成
  • 即使内容中有名为“ID”的属性,除非您使用的 DTD 指定了 ID 属性是什么,否则您必须使用 setIdAttribute() 指定它。您不是在指定值,而是在指定名称。

标签: php html regex dom


【解决方案1】:

你是对的:getElementByID 不起作用。

改用getElementById()。 Javascript 区分大小写。

【讨论】:

    【解决方案2】:

    好吧,我假设 $content 是一个 sn-p?那么这可能就是您所需要的:

    $doc = new DOMDocument();
    $doc->validateOnParse = true; 
    $doc->loadHTMLFile('<html><body>' . $content . '</body></html>');   
    $element = $doc->getElementById('div_to_edit'); 
    

    【讨论】:

    • 它是一个 sn-p,所以在您的示例中,我如何能够将 div 'div_to_edit' 完全替换为另一个 div,然后保存 HTML?
    【解决方案3】:

    请记住,您必须有一个有效的网页,这意味着完整的 HTML 树:

    <html>
    <head>
    <script type="text/javascript">
    function changeText(div){
        document.getElementById(div).innerHTML = 'my new text';
    }
    </script>
    </head>
    <body>
    
    --- your body ---
    
    <div id="DIV_ID">old text</div>
    
    <input type="button" onclick="chageText('DIV_ID');" value="Click me" />
    
    </body>
    </html>

    请记住,您必须使用以下命令调用 getElementById:

    <script type="text/javascript"> // as from HTML5 you can use only <script>
        document.getElementById("DIV_ID").innerHTML = 'my new text';
    </script>

    【讨论】:

      【解决方案4】:

      试试这个..

      var myDiv = document.getElementById('content_div');
      myDiv.innerHTML = "NEW ALL SORTS HERE";
      

      【讨论】:

      • 我认为他在服务器端使用 php 的 DOMDocument ......不是 javascript。
      • 我正在寻找 PHP 的答案,我将其标记为 PHP,但我可能应该提到这一点,也很抱歉。
      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多