【问题标题】:jQuery Selector last on a Knockout PagejQuery 选择器最后出现在敲除页面上
【发布时间】:2014-07-06 00:56:25
【问题描述】:

单击我的 HTML 页面上的按钮时,我将数据添加到可观察数组中,然后敲除将其显示在页面上。我在 html 中加入了逗号(,) 以获得一个逗号分隔的集合。

但是,我应该清除最后一个逗号。我使用带有 class 的 span 添加逗号。

我将 jquery 选择器用于具有最后一个选项的类,以将内部 html 设置为空字符串。但是它会清除所有逗号。

如果我使用 first 作为选项,它会清除第一个逗号。但是,我希望删除最后一个。

$(".spanSeparator:last")[0].innerHTML = "";

这里是小提琴:http://jsfiddle.net/mayurarora/ZtL8t/

谢谢

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    我认为您正在尝试以完全错误的方式解决您的问题。只需使用 KO 的计算以任何您喜欢的方式格式化您的数据存储:

    viewModel.formattedDataStore = ko.computed(function(){
        return this.dataStore().join(", ");
    }, viewModel);
    

    此计算返回数据存储中以逗号粘合的所有元素。现在这个计算值可以通过简单的 text 绑定绑定到 <span>

    <span >{</span>
    <span data-bind='text:formattedDataStore'></span>
    <span>}</span>
    

    瞧!现在无需通过.innerHTML 更改您的输出。

    http://jsfiddle.net/ZtL8t/1/

    【讨论】:

    • 超级!非常感谢。只是几件事......关于为什么 jQuery 最后没有工作的任何想法......并且您在视图模型之外添加了这个计算的 observable。我尝试将其添加到内部,但出现了一些参考错误。你能告诉我你将如何在视图模型中做到这一点吗?非常感谢。
    • 显然.innerHTML = "" 语句在foreach 绑定渲染元素列表之前执行。有一种特殊的方法可以修改foreach 绑定的输出 - 选项afterRender(请参阅关于foreach 的KO 文档)。所以没有优雅的方法来定义 var viewModel = { ... } 内的计算,因为没有办法将未定义的视图模型作为计算的上下文传递。您应该考虑使用构造函数而不是通过var 定义普通对象。
    猜你喜欢
    • 2011-02-18
    • 2011-04-23
    • 1970-01-01
    • 2011-07-31
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多