【问题标题】:Is there something like simple_html_dom.php for JavaScript?JavaScript 有没有类似 simple_html_dom.php 的东西?
【发布时间】:2011-10-16 17:33:23
【问题描述】:

我正在使用 Appcelerator Titanium 构建一个 iPhone 应用程序,我需要将一个 HTML 字符串(可能包含无效的 HTML,如缺少标签,不是我的错)转换为一个 DOM 对象。在这个 DOM 元素中我需要找到一个特定的<div>,并将这个<div> 的内容放在一个WebView 中。

无论如何,我正在寻找类似Simple HTML DOM 脚本的东西,它是用于PHP 的,以便在DOM 中搜索这个<div>。我希望脚本扫描(无效)HTML 字符串,并获取 <div> 的 innerHTML。

我怎样才能最好地在 JavaScript 中做到这一点?

【问题讨论】:

    标签: javascript parsing dom titanium appcelerator


    【解决方案1】:

    下面的代码是基本的字符串到 DOM 的转换器。有关详细说明,请参阅链接的答案。

    function string2dom(html, callback){    
        /* Create an IFrame */
        var iframe = document.createElement("iframe");
        iframe.style.display = "none";
        document.body.appendChild(iframe);
    
        var doc = iframe.contentDocument || iframe.contentWindow.document;
        doc.open();
        doc.write(html);
        doc.close();
    
        function destroy(){
            iframe.parentNode.removeChild(iframe);
        }
        if(callback) callback(doc, destroy);
        else return {"doc": doc, "destroy": destroy};
    }
    

    此代码 sn-p 不会清理 HTML。脚本将被执行,外部资源将被加载。代码说明和 HTML sanitiser 可以在 this answer

    找到

    用法(示例),小提琴:http://jsfiddle.net/JFSKe/:

    string2dom("<html><head><title>Test</title></head></html>", function(doc, destroy){
        alert(doc.title); /* Alert: "Test" */
        destroy();
    });
    
    var test = string2dom("<div id='secret'></div>");
    alert(test.doc.getElementById("secret").tagName); /* Alert: "DIV" */
    test.destroy();
    

    【讨论】:

    • 感谢您的回复。但是,Titanium 无法识别 document 属性,因为它不存在。是否可以通过其他方式将字符串转换为 DOM?
    • Titanium 不提供任何 DOM 方法。如果您想要的文档片段结构良好,那么使用 RegExp 不会有任何坏处。否则,我建议看看 Appcelerator Q&A:developer.appcelerator.com/questions/tag/dom
    猜你喜欢
    • 2020-03-11
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多