5

我想将HTML表格转换为ulli元素。我的表结构是

<table>
    <tbody>
        <tr>
            <th>1974</th>
            <td>UK</td>
        </tr>
        <tr>
                <th>1976</th>
            <td>Street</td>
        </tr>
        <tr>
            <th>1976-2002</th>
            <td>visitors.</td>
        </tr>

    </tbody> 
 </table>

我试图将其转换为

        <ul>
            <li>
                <p>1974</p>
                <p>UK</p>
            </li>
            <li>
                    <p>1976</p>
                <p>Street</p>
            </li>
            <li>
                <p>1976-2002</p>
                <p>visitors.</p>
            </li>

        </ul> 

使用jquery replaceWith如下功能。在这里,我首先要转换<tbody>元素。

$(document).ready(function() {
    $("tbody").each(function(){
    var html = $(this).html();
    $(this).replaceWith("<ul>" + html + "</ul>");
    });
)};

但这并没有给出任何肯定的答案。任何人都知道如何做到这一点。

谢谢。

4

5 回答 5

10

我会这样做:

$(document).ready(function() {
    var ul = $("<ul>");
    $("table tr").each(function(){
        var li = $("<li>")
        $("th, td", this).each(function(){
            var p = $("<p>").html(this.innerHTML);
            li.append(p);
        });
        ul.append(li);
    })    
    $("table").replaceWith(ul);    
});

首先创建 UL,然后将表替换为 UL。

演示:http: //jsfiddle.net/yXyCk/

于 2013-02-12T09:20:31.680 回答
6

尝试

$('table').replaceWith( $('table').html()
   .replace(/<tbody/gi, "<ul id='table'")
   .replace(/<tr/gi, "<li")
   .replace(/<\/tr>/gi, "</li>")
   .replace(/<td/gi, "<p")
   .replace(/<\/td>/gi, "</p>")
   .replace(/<th/gi, "<p")
   .replace(/<\/th>/gi, "</p>")
   .replace(/<\/tbody/gi, "<\/ul")
);

上面的代码已经过测试并为我工作..
干杯

于 2013-02-12T09:16:01.190 回答
0

这里其他答案的问题是,将表格转换为列表时,所有样式都会丢失。这是我用来完成它并保持表格外观的:

function convert_table_to_list($table) {
    var $list = $("<ul></ul>");
    $list.css("list-style-type", "none");
    $list.css("padding", 0);

    $table.find("tr").each(function() {
        var $li = $("<li></li>");

        $li.height($(this).height());
        $(this).find("td").each(function() {
            var $div = $("<div></div>");

            // Add inline and external styling
            var style = css($(this));
            $div.css(style);

            // Add some browser default styles
            $div.css("display", "table-cell");
            $div.html($(this).html());
            $div.width($(this).width());
            $div.height($(this).height());
            $div.css("vertical-align", $(this).css("vertical-align"));
            $div.css("padding", $(this).css("padding"));

            // Add class(es)
            $div.addClass($(this).attr("class"));

            // Append to li
            $li.append($div);
        });
        // Append li to ul
        $list.append($li);
    });

    $list.insertAfter($table);
    $table.remove();

    return $list;
}

// The following are taken from http://stackoverflow.com/questions/754607/can-jquery-get-all-css-styles-associated-with-an-element
function css(a) {
    var sheets = document.styleSheets, o = {};
    for (var i in sheets) {
        var rules = sheets[i].rules || sheets[i].cssRules;
        for (var r in rules) {
            if (a.is(rules[r].selectorText)) {
                o = $.extend(o, css2json(rules[r].style), css2json(a.attr('style')));
            }
        }
    }
    return o;
}
function css2json(css) {
    var s = {};
    if (!css) return s;
    if (css instanceof CSSStyleDeclaration) {
        for (var i in css) {
            if ((css[i]).toLowerCase) {
                s[(css[i]).toLowerCase()] = (css[css[i]]);
            }
        }
    } else if (typeof css == "string") {
        css = css.split("; ");
        for (var i in css) {
            var l = css[i].split(": ");
            s[l[0].toLowerCase()] = (l[1]);
        }
    }
    return s;
}

JSFiddle上查看

于 2014-06-28T18:44:58.107 回答
0

使用此代码

function convertToList(element) {
    var list = $("<ul/>");

    $(element).find("tr").each(function() {
        var p = $(this).children().map(function() {
            return "<p>" + $(this).html() + "</p>";
        });

        list.append("<li>" + $.makeArray(p).join("") + "</li>");
    });

    $(element).replaceWith(list);
}
于 2013-02-12T09:37:34.370 回答
-1

<table>结构菜单转换为<UL>使用 jQuery

如果为了更好的速度/性能,我使用了for循环each

   for(var i=0; i<$anchorTarget.length; i++){
            var $eachAnchor = $anchorTarget.eq(i);
            //get anchor markup from table
            var getAnchor = $eachAnchor.parent().html();
            //append anchor on created ul
            $("."+convertedMenuCls).append("<li>"+getAnchor+"</li>");
            //hide old icon - if you've icon as a image in old table markup
            $eachAnchor.parent().parent().find("img").hide();
            //Add new icon
            $eachAnchor.parent().parent().find("img").after("<span>+</span>");
        }

表结构

在此处输入图像描述

UL 结构 转换后 在此处输入图像描述

这是工作代码: Convert Table structure menu to UL using jQuery

于 2016-12-29T06:31:23.273 回答