Kendo TreeView 搜索并突出显示

2024-04-02

我有一个带有 spriteclass 的 KendoTreeview 。我想用我的搜索词突出显示节点(根节点和子节点)。我已经实现了搜索功能。但是当我搜索它时,问题是突出显示节点中的术语,但在第一次搜索后缺少节点中的 SpriteClass。任何想法 ?

jsFiddle代码 http://jsfiddle.net/IndyGuy/wmpy7c49/

$('#search-term').on('keyup', function () {
    $('span.k-in > span.highlight').each(function () {
        $(this).parent().text($(this).parent().text());
    });

    // ignore if no search term
    if ($.trim($(this).val()) == '') {
        return;
    }

    var term = this.value.toUpperCase();
    var tlen = term.length;

    $('#treeview-sprites span.k-in').each(function (index) {
        var text = $(this).text();
        var html = '';
        var q = 0;
        while ((p = text.toUpperCase().indexOf(term, q)) >= 0) {
            html += text.substring(q, p) + '<span class="highlight">' + text.substr(p, tlen) + '</span>';
            q = p + tlen;
        }

        if (q > 0) {
            html += text.substring(q);
            $(this).html(html);

            $(this).parentsUntil('.k-treeview').filter('.k-item').each(

            function (index, element) {
                $('#treeview-sprites').data('kendoTreeView').expand($(this));
                $(this).data('search-term', term);
            });
        }
    });

$("#treeview-sprites").kendoTreeView({
    dataSource: [{
        text: "My Documents",
        expanded: true,
        spriteCssClass: "rootfolder",
        items: [{
            text: "Kendo UI Project",
            expanded: true,
            spriteCssClass: "folder",
            items: [{
                text: "about.html",
                spriteCssClass: "html"
            }, {
                text: "index.html",
                spriteCssClass: "html"
            }, {
                text: "logo.png",
                spriteCssClass: "image"
            }]
        }, {
            text: "New Web Site",
            expanded: true,
            spriteCssClass: "folder",
            items: [{
                text: "mockup.jpg",
                spriteCssClass: "image"
            }, {
                text: "Research.pdf",
                spriteCssClass: "pdf"
            }, ]
        }, {
            text: "Reports",
            expanded: true,
            spriteCssClass: "folder",
            items: [{
                text: "February.pdf",
                spriteCssClass: "pdf"
            }, {
                text: "March.pdf",
                spriteCssClass: "pdf"
            }, {
                text: "April.pdf",
                spriteCssClass: "pdf"
            }]
        }]
    }]
})

;


Kendo 的树视图小部件不喜欢在 HTML 中乱搞,所以我建议改为修改数据源(这将需要encodedDS 中所有项目的选项)。

在 keyup 处理程序中,每当您搜索以清除突出显示时都会重置 DS,然后设置模型的文本属性,而不是直接替换元素的 HTML:

$('#search-term').on('keyup', function () {
    var treeView = $("#treeview-sprites").getKendoTreeView();
    treeView.dataSource.data(pristine);

    // ignore if no search term
    if ($.trim($(this).val()) == '') {
        return;
    }

    var term = this.value.toUpperCase();
    var tlen = term.length;

    $('#treeview-sprites span.k-in').each(function (index) {
        var text = $(this).text();
        var html = '';
        var q = 0;
        while ((p = text.toUpperCase().indexOf(term, q)) >= 0) {
            html += text.substring(q, p) + '<span class="highlight">' + text.substr(p, tlen) + '</span>';
            q = p + tlen;
        }

        if (q > 0) {
            html += text.substring(q);

            var dataItem = treeView.dataItem($(this));
            dataItem.set("text", html);

            $(this).parentsUntil('.k-treeview').filter('.k-item').each(

            function (index, element) {
                $('#treeview-sprites').data('kendoTreeView').expand($(this));
                $(this).data('search-term', term);
            });
        }
    });

    $('#treeview-sprites .k-item').each(function () {
        if ($(this).data('search-term') != term) {
            $('#treeview-sprites').data('kendoTreeView').collapse($(this));
        }
    });
});

树的定义需要encoded使其工作的选项:

var pristine = [{
    encoded: false,
    text: "Kendo UI Project",
    expanded: true,
    spriteCssClass: "folder",
    items: [{
        encoded: false,
        text: "about.html",
        spriteCssClass: "html"
    }, {
        encoded: false,
        text: "index.html",
        spriteCssClass: "html"
    }, {
        encoded: false,
        text: "logo.png",
        spriteCssClass: "image"
    }]
}, {
    encoded: false,
    text: "New Web Site",
    expanded: true,
    spriteCssClass: "folder",
    items: [{
        encoded: false,
        text: "mockup.jpg",
        spriteCssClass: "image"
    }, {
        encoded: false,
        text: "Research.pdf",
        spriteCssClass: "pdf"
    }, ]
}, {
    encoded: false,
    text: "Reports",
    expanded: true,
    spriteCssClass: "folder",
    items: [{
        encoded: false,
        text: "February.pdf",
        spriteCssClass: "pdf"
    }, {
        encoded: false,
        text: "March.pdf",
        spriteCssClass: "pdf"
    }, {
        encoded: false,
        text: "April.pdf",
        spriteCssClass: "pdf"
    }]
}];

$("#treeview-sprites").kendoTreeView({
    dataSource: [{
        text: "My Documents",
        expanded: true,
        spriteCssClass: "rootfolder",
        items: pristine
    }]
});

(demo http://jsfiddle.net/wmpy7c49/2/)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kendo TreeView 搜索并突出显示 的相关文章

  • .onLoad 在渲染完成之前调用吗?

    我想在页面加载后调用一些 JS 这可能会涉及延迟 因此我希望首先加载页面 以便显示内容 但似乎调用了 onLoad 处理程序中的代码before渲染完成 是否有更好的事件可以使用 该事件在页面 完成 时触发 澄清一下 我想在页面呈现在屏幕上
  • 如何使整个 jqGrid 禁用/只读

    如何使整个 jqGrid 禁用 只读 我有一个带有逻辑 编辑部分 的页面 当用户选择要编辑的内容时显示该页面 并在用户完成编辑 保存或取消 时隐藏该页面 显示编辑部分时 我禁用了页面上的几个其他元素 我想禁用他们在 jqGrid 中单击的能
  • Bootstrap 切换导航项在单击后保持打开状态

    我有简单的 Bootstrap 3 切换导航 ul class nav navmenu nav clearfix li class navmenu brand dropdown clearfix a href class dropdown
  • React Native:访问静态函数内的组件状态

    我有一个这样定义的组件 export class A extends Component constructor props this state scene 0 static changeScene scene this setState
  • JavaScript 键码 46 是 DEL 功能键还是 (.) 句点符号?

    我使用 jquery 在 JavaScript 中编写一些逻辑 其中我必须根据 REGEX 模式检查输入内容 例如 a zA Z0 9 Alpha numeric and 逻辑差不多完成了 我只是在过滤功能键 DEL 时遇到了一点问题 我的
  • 预览来自 url 输入的图像

    我有这段代码 从 url 预览图像 它工作得很好 除了它仅在用户单击输入框外部时运行 我如何更改它 以便在将值放入输入框中时它会立即运行 我需要立即显示图像 我想我需要改变onblur to onchange但我尝试改变它 但没有成功
  • 随机字体颜色

    我需要用 2 或 3 种随机颜色为文本着色 我如何在 PHP 或 JavaScript 中执行此操作 color str pad sprintf x x x rand 0 255 rand 0 255 rand 0 255 6 rand 0
  • 无法在 routerOnActivate 上获取查询参数

    我在尝试使用新的路线库获取查询参数时遇到问题 VERSION2 0 0 rc 1 Problem routerOnActivate curr RouteSegment prev RouteSegment currTree RouteTree
  • 什么是“Javascript 引导加载程序”?

    我主要在Facebook的源码中看到过这个Bootloader setResourceMap bMxb7 name javascript 中的引导加载程序到底是什么 它的用途和目的是什么 Bootloader 是 Facebook 前端代码
  • jQuery - 禁用选定的选项

    需要使用 jQuery 禁用选择框中已选择的选项 我希望它变灰 就像汇编选择 http www ryancramer com projects asmselect examples example1 html 测试我的例子here http
  • jQueryUI autoComplete 返回空列表

    在我的 asp net mvc3 应用程序中 我为搜索框添加了自动完成功能 当我测试它时 该操作返回了 3 个结果 您可以看到显示了一个列表 但是 这是一个空列表 您只看到 3 个 并且 li 标记之间没有任何内容 我很确定 操作没问题 因
  • 如何在不同位置显示验证错误消息?

    我在用knockout js knockout validation插件 我正在添加示例小提琴 http jsfiddle net hsnCW 1 http jsfiddle net hsnCW 1 在此示例中 对数组进行了自定义验证以检查
  • 以小并发批量运行 Promise(一次不超过 X)

    Async 库具有类似的功能每个限制 https github com caolan async eachLimit它可用于将大量作业有效地分布在多个 CPU 核心上 如下所示 var numCPUs require os cpus len
  • AWS DynamoDb DocumentClient - 从项目数组创建批量写入 - node.js

    我正在尝试执行batchWrite使用 DynamoDB 的操作DocumentClient来自项目数组 JSON 这是我的代码 var items for i 0 i lt orders length i var ord orders i
  • BigVideo.js 播放结束时 URL 重定向

    我已经使用基于 Video js 的 BigVideo 在页面上实现了背景视频 单击 div 时 视频会在后台播放 我一生都无法弄清楚如何在视频播放完毕后重定向到另一个 URL 这是我正在使用的代码 视频播放链接 a href vids g
  • Node Js - 识别请求是来自移动设备还是非移动设备

    我对 Node js 还是个新手 是否有任何解决方法或方法如何使用 Node js 识别来自客户端的请求是来自移动设备还是非移动设备 因为我现在正在做的是我想根据设备类型 移动 桌面 限制对某些 API 的访问 我在服务器端使用restif
  • 如何在 jQuery 中使用特定值来定位特定属性? [复制]

    这个问题在这里已经有答案了 我试图解决的问题是 编写函数newMessage 该函数接收主题名称作为参数 函数应将 p 标签的背景颜色更改为红色 其中数据主题名称为 topicName 例如 如果 HTML 是 div p General
  • 添加鼠标事件到svg ,检测网格悬停

    我有一个有点复杂的问题 我正在尝试通过 svg 渲染网格 然后将事件侦听器添加到网格中 目前我正在通过渲染网格
  • 如果满足条件,Angular JS 如何添加 CSS 类

    我正在创建一个截断指令 如果字符超过 10 我就会截断文本字符串 然后它将显示 我的目标是编写一个条件 如果字符少于 10 个 则删除 如果有人对我如何实现此目标有任何想法 我会坚持这一点并接受建议 这是我的代码 var app angul
  • 如何让 JQuery UI 自动完成与项目 id 配合使用

    我在这里看到了这篇文章 带有项目和 ID 的 jQuery UI 自动完成 https stackoverflow com questions 4815330 jquery autocomplete with item and id但我无法

随机推荐

  • 我可以在没有 Visual Studio 的情况下使用 Visual C++ 编译器吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有什么方法可以从命令行使用 Visual C 或 Visual C 编译器而无需安装 Visual Studio 我以前也试过 没找到 寻
  • MongoDB 和 C# Find()

    我有下面的代码 我是 mongodb 的新手 我需要帮助来查找集合中的特定元素 using MongoDB Bson using MongoDB Driver namespace mongo console public class Use
  • 是否可以通过 Elasticsearch 中的映射来更新索引中的现有字段?

    我已经创建了一个索引 它包含我的数据MySQL数据库 我有几个字段string在我的表中 我需要它们作为不同的类型 integer double in Elasticsearch 所以我知道我可以通过mapping如下 mappings m
  • UITableViewController 和 UITextField 键盘

    我有一个带有分组静态 UITableView 的 UITableViewController 我正在故事板上定义静态表视图的单元格 其中一个单元格中有一个文本字段 当调用此文本字段时 键盘会弹出 但是 表视图不会像表视图控制器上通常那样自动
  • 泛型类型不相等

    下面的代码段打印出 类型不相同 为什么 我知道使用interfaceOnMyType GetGenericTypeDefinition 可以解决问题 但为什么我必须这样做呢 class Program static void Main st
  • :active 时的样式按钮与 :hover 不同

    我想制作一个按钮 在悬停时显示背景颜色 在按钮按下时显示没有背景颜色的按钮颜色 这是我当前的代码 windowButton hover background color 1a82b8 windowButton active windowCl
  • 如何在 Cypress 中点击 x 次

    我的网站上有一个对象列表 所有对象旁边都有 添加 按钮 单击第一个 添加 按钮时 将添加该对象 并且该行消失并被下一个对象取代 对象名称相同 在保存之前 我想 click 三次以添加列表中的前三个对象 我怎样才能做到这一点 我知道 clic
  • 带有页眉和页脚的 uiwebview

    我正在尝试添加页眉和页脚 它们都是UIViews 但由于某种原因我的页脚粘在底部 我正在使用KVO查看我的内容大小的方法 我在这里介绍我认为问题所在的方法 void updateLayout Update the frame of the
  • 如何在aws lambda中添加mecab库

    我正在尝试将 mecab 库添加到 aws lambda 层 但它不起作用 我想要的是标记日语和韩语 标记化就足够了 这就是我所做的 我参考了这个网站 https towardsdatascience com how to install
  • 使用字符串输入引用模型

    假设我希望创建一个可以使用 type string 和 id int 查询所需对象的页面 query type people id 1 会来接我 人物查找 1 whereas 查询 类型 城市 id 123 会来接我 城市查找 123 但是
  • MPI 是否提供预处理器宏?

    MPI 标准是否提供了预处理器宏 因此如果我的 C C 代码由支持 MPI 的编译器编译 它可以分支吗 就像是 OPENMPOpenMP 的宏 根据MPI标准 http www mpi forum org docs mpi 3 0 mpi3
  • 如何让 Mathematica 内核暂停以创建外部文件

    是否可以在计算期间暂停 Mathematica 内核 这是一个例子 Module Mathematica code Calls an external program with some argument Needs to wait for
  • C++ 从函数指针数组调用函数

    我使用存储在数组中的函数指针 并使用 typedef 定义指针 但我对如何调用该函数有点迷失 这是 Menu h 部分 typedef void Menu FunctionPointer FunctionPointer m funcPoin
  • 如何在本机 Android 应用程序开发中使用 OpenStreetMap [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您好 我的 Android 手机中有默认的 Android 虚拟内容 本机应用程序构建 现在我需要使用
  • Spark 中广播对象的最大大小是多少?

    使用数据框时播送 http spark apache org docs 2 0 0 api java org apache spark sql functions html broadcast org apache spark sql Da
  • 如何在vim的ex模式下从缓冲区粘贴?

    我在从文件复制某些文本然后将其复制到新的拆分窗口时遇到问题 3yy 新 p 在命令模式下它的工作 当我按下时 复制后分割窗口中的 p 它的工作 我理解您想要 拉出当前缓冲区中的当前行和下面的两行 在新的水平分割中打开一个空缓冲区并 将这三行
  • 使用“boot”包进行引导的 GPU 计算

    我想使用引导程序进行大型分析 我发现使用并行计算提高了引导速度 如以下代码所示 并行计算 detect number of cpu library parallel detectCores library boot boot functio
  • JavaFX 任务线程未终止

    我正在编写一个 JavaFX 应用程序 我的对象扩展了 Task 以提供远离 JavaFX GUI 线程的并发性 我的主要课程如下所示 public class MainApp extends Application Override pu
  • 将“MM/dd/yyyy HH:mm”形式的字符串转换为 Spark 数据帧中的 joda 日期时间

    我正在读取 csv 文件 其中一列中有一个应转换为日期时间的字符串 该字符串的形式为MM dd yyyy HH mm 但是 当我尝试使用 joda time 对其进行转换时 我总是收到错误 线程 main 中的异常 java lang Un
  • Kendo TreeView 搜索并突出显示

    我有一个带有 spriteclass 的 KendoTreeview 我想用我的搜索词突出显示节点 根节点和子节点 我已经实现了搜索功能 但是当我搜索它时 问题是突出显示节点中的术语 但在第一次搜索后缺少节点中的 SpriteClass 任