【问题标题】:Change icon of table with jQuery使用 jQuery 更改表格的图标
【发布时间】:2017-07-11 06:40:37
【问题描述】:

我想在 jQuery 中更改表格的图标,但我无法找到元素并更改它的背景。我正在使用 jQuery 的树表库。

这是我的 jQuery 代码:

Factory.query().$promise.then(function(data) {
        $rootScope.tree = data;
        console.log($rootScope.tree);
        buildTreeTable($rootScope.tree);
})


function buildTreeTable(tree){
    $("#example").treetable({
    expandable:     true,
    onNodeExpand:   nodeExpand,
    onNodeCollapse: nodeCollapse
});

function nodeExpand () {
    getNode(this.id);  
}


function nodeCollapse () {
    console.log("Collapsed: " + this.id);
}

$("#example tbody").on("mousedown", "tr", function() {
                                        $(".selected").not(this).removeClass("selected");
        $(this).toggleClass("selected");
});


var len = tree.length;
for(var i = 0; i < len; i++){
    if (tree[i].status == 1){
        var print = $('#example').attr('class').find('a').css("background-image","url(../../images/image.png)");
        console.log("Status is 1. Load icon for 1", print);
        }
}

这是我的html:

<div class="panel-body">
                <table id="example">
                <tbody>
                <thead>

                    <tr>
                        <th >Tree data</th>
                        <th>Header1</th>
                        <th>Header2</th>
                    </tr>
                </thead>
                </tbody>
                </table> 

                </div> 

我想根据从数据库中获取的内容更改&lt;td&gt; 的图标,这意味着如果状态为 1,我加载一张背景图片,如果状态为 2,我加载另一张。 我的&lt;td&gt; 元素包含&lt;span&gt;&lt;a&gt; 标签,我想更改&lt;a&gt; 标签的背景图片。我怎样才能在jQuery 中实现这一点?

这是页面加载后我的元素:

这是我得到的错误:

TypeError: $(...).attr(...).find is not a function

编辑:

这段代码是我尝试为每个 tr 加载单独图标的方式

function changeIcon(data){
        for(var i = 0; i < data.length; i++){
                if (data[i].status == 0){
                $('tr span.icon').each(function(){
                $(this).addClass('status');
        })
        console.log("Status is 0. Load icon for 0");
        }else if(data[i].status == 1){
        console.log("Status is 1. Load icon for 1");
        }else if(data[i].status == 2){
        console.log("Status is 2. Load icon for 2");
        }else
        console.log("Status is 3. Load icon for 3");

        }

}

提前致谢!

【问题讨论】:

  • 到目前为止您尝试过什么?请展示你的作品。说明您想要做什么以及正在发生的事情,以便我们帮助您解决问题。
  • 我已经添加了我尝试过的内容。问题是背景图片没有添加到 标签中。
  • 数据从数据库中动态加载。
  • 您的 HTML 中没有 &lt;a&gt; 标记。
  • 我在页面加载后添加了一张图片。

标签: javascript jquery html css treetable


【解决方案1】:

您收到该错误是因为您的 jQuery 链中有一个不必要的 .attr('class')

.attr('name') 返回具有您提供给它的名称的属性的值。因此,您正在编写的内容将返回 HTML 元素上的 class 属性的值,它不会继续 jQuery 链。 &lt;table id="example"&gt; 没有class 属性,因此返回的值将是undefined。然后,您尝试在链上运行更多 jQuery 方法,例如 .find(),但 undefined 不是 jQuery 对象,您不能这样做。

将你的行改为:

 $('#example').find('a').css("background-image","url(../../images/image.png)");

第二个问题是你的 for 循环需要在你的 .then() 成功处理函数中。否则,它将立即运行,而不是在 AJAX 调用完成后运行。

Factory.query().$promise.then(function(data) {
    $rootScope.tree = data;
    console.log($rootScope.tree);
    buildTreeTable($rootScope.tree);

    // put your background image code here
    $('#example').find('a').css("background-image","url(../../images/image.png)")
})

第三,您应该阅读 jQuery 选择器的工作原理,因为您的选择总是会在整个表格中找到每个 &lt;a&gt; 标记。

【讨论】:

  • 不应用背景图片。如果我尝试检查是否找到了这样的 a 标签: var elem = $('#example').find('a').length; console.log("状态为 1。加载图标为 1", elem);我在控制台中得到 0。
  • 那是因为它还不存在。见“第二个问题”
  • 现在找不到图片了。这是为什么 ?我收到此错误:GET localhost:8080/images/image.png 404(未找到)
  • 您使用的是相对路径。确保图像存在于 URL 中的两个级别,而不是文件系统中。
  • 如何根据我从 db 获得的值更改某个 tr 的图标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多