- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 JavaScript 很陌生,我正在尝试将 Json 数据绑定(bind)到 Accordion ,但到目前为止,我似乎还无法正确执行此操作。 jsfiddle
另外我如何能够立即在 Accordion 中搜索?
var contacts = [{
"Title": "Change Management",
"Definition": "Collective term for all approaches to prepare and support individuals, teams, and organizations in making organizational change. The most common change drivers include: technological evolution, process reviews, crisis, and consumer habit changes; pressure from new business entrants, acquisitions, mergers, and organizational restructuring. It includes methods that redirect or redefine the use of resources, business process, budget allocations, or other modes of operation that significantly change a company or organization. Organizational change management (OCM) considers the full organization and what needs to change,[3] while change management may be used solely to refer to how people and teams are affected by such organizational transition. It deals with many different disciplines, from behavioral and social sciences to information technology and business solutions. In a project-management context, the term "change management" may be used as an alternative to change control processes where in changes to the scope of a project are formally introduced and approved."
},
{
"Title": "Testing glossary",
"Definition": "Testing Text 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"
},
{
"Title": "More info",
"Definition": "Testing Text 1 but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but occasionally circumstances occur in which toil and pain"
},
{
"Title": "Category 2",
"Definition": "Testing Text 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
}
];
var departmentlist = new Array();
$.each(contacts, function(i, contact) {
//insert the departments
if (contact.Title != null && $('#' + contact.Title).length == 0) {
$('#accordion').append('<h3 id=' + contact.Title + '><a href="#">' + contact.Title + '</a></h3>');
departmentlist.push(contact.Title);
}
//insert contacts in the accordion
$('#' + contact.Title).after('<p><a' + contact.Definition + '</a></p>');
});
$.each(departmentlist, function(i, list) {
$("#" + list).nextUntil("h3").wrapAll("<div></div>");
});
});
$(function() {
$("#accordion").accordion({
collapsible: true,
active: false,
});
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" rel="stylesheet"/>
<div id="contactlist">
<div id="accordion">
</div>
</div>
更新2
具有以下code worked作者:@Twisty。这是我目前在 SharePoint Site 中看到的似乎唯一仍然不起作用的是搜索/突出显示。
最佳答案
考虑以下可能的解决方案。
工作示例:https://jsfiddle.net/Twisty/6v4h7fL3/73/
将 Fiddle 切换为使用 jQuery 3.3.1 和 jQuery UI 1.12.1。如果可能的话最好使用最新版本。代码应该适用于一些未经测试的旧版本。
HTML
<div id="contactlist">
<form id="search-form" class="ui-widget">
<p class="ui-widget-content">
<label for="term">Search:</label> <input type="text" id="term" class="ui-widget ui-corner-all" /> <button type="submit" id="btn-go" class="ui-widget ui-button ui-corner-all">Find</button>
</p>
</form>
<div id="accordion">
</div>
</div>
添加了搜索字段表单。使用 submit
的表单事件回调允许用户按 Enter 或单击按钮。我怀疑很多像我这样的用户输入一些内容并点击 Enter。
JavaScript
$(function() {
var departmentlist = [];
var a = $("#accordion");
function wrapText(term, obj) {
var myText = obj.html().toString();
var re = new RegExp(term, "g");
var wObj = $("<span>", {
class: "found ui-state-highlight"
}).html(term);
var w = wObj.prop("outerHTML");
var newText = myText.replace(re, w);
console.log("Wrap:", re, myText, newText);
obj.html(newText);
}
$.each(contacts, function(i, contact) {
//insert the departments
if (contact.Title != null && $('#' + contact.Title).length == 0) {
var header = $("<h3>", {
id: contact.Title
}).html(contact.Title).appendTo(a);
var details = $("<div>").appendTo(a);
$("<p>").html(contact.Definition).appendTo(details);
departmentlist.push(contact.Title);
}
});
a.accordion({
collapsible: true,
active: false,
});
$("#search-form").submit(function(e) {
e.preventDefault();
var q = $("#term").val();
$.each(contacts, function(k, v) {
if (v.Definition.indexOf(q) >= 0) {
// Found
console.log("'" + q + "' found under " + v.Title + " (" + k + ")");
// Collapse all
a.accordion("option", "active", false);
// Active Section with found item
a.accordion("option", "active", k);
a.find(".found").removeClass("found ui-state-highlight");
wrapText(q, $(".ui-accordion-content-active"));
return false;
}
});
});
});
wrapText()
对搜索的文本进行一些基本的替换,并将其用 <span>
括起来。用于突出显示。它接受术语和一个 jQuery 对象,该对象包含应搜索和突出显示的文本。
我改进了您使用的构造代码,使其更像 jQuery。一旦一切都构建完成,我们应用 .accordion()
.
当输入搜索并提交表单时,我们会查找第一个出现的查询,打开它的容器并突出显示文本。
这有点快速而且肮脏。如果您需要的话,可以通过多种方式对其进行改进。例如,现在它不区分大小写。因此,如果您搜索 testing
你不会得到任何结果,但如果你搜索 Testing
,它会起作用的。
更新
这是一个更加独立的功能,如果您在 SharePoint 中运行它,而您对 HTML 没有太多控制权,那么这会很有帮助。
$(function() {
function GetItems() {
var siteURL = _spPageContextInfo.webServerRelativeUrl;
//var siteURL = "https://reqres.in/api/unknown" //Non-SharePoint URL
$.ajax({
url: siteURL + "/_api/web/lists/GetByTitle('glossary of terms')/items", //change the list name
type: "GET",
dataType: "json",
headers: {
Accept: "application/json;odata=verbose"
},
success: function(data) {
if (data.d.results.length > 0) {
GenerateAccordionFromJson(data.d.results, true, $("#accordion"));
$("#accordion").accordion({
collapsible: true,
active: false,
});
} else {
$('#accordion').append("<span>No Records Found.</span>");
}
},
error: function(error) {
console.log(JSON.stringify(error));
}
});
}
function wrapText(term, tObj) {
var oldText = tObj.html();
var re = new RegExp(term, "g");
var newText = oldText.replace(term, "<span class='found highlight'>" + term + "</span>");
tObj.html(newText);
}
function GenerateAccordionFromJson(json, search, tObj) {
if (search == undefined) {
search = false;
}
if (tObj == undefined || tObj.length < 1) {
tObj = $("<div>", {
class: "items",
id: "accordion" + ($("#accordion").length ? "-" + $("#accordion").length : "")
}).appendTo($("body"));
}
if (search) {
var form = $("<form>", {
class: "search-form"
}).submit(function(e) {
e.preventDefault();
var q = $(".search-term", this).val();
var aObj = $(this).next("div");
var stacks = [];
$(".found").removeClass("found highlight");
$(".ui-accordion-content", aObj).each(function(ind, el) {
stacks.push($(el).text().trim());
});
$.each(stacks, function(i, s) {
if (s.indexOf(q) >= 0) {
aObj.accordion("option", "active", false);
aObj.accordion("option", "active", i);
wrapText(q, $(".ui-accordion-content-active", aObj));
}
});
}).insertBefore(tObj);
$("<p>").html("Search:").appendTo(form);
$("<input>", {
type: "text",
class: "search-term"
}).appendTo($("p", form));
$("<button>", {
type: "submit",
class: "search-btn-go"
}).appendTo($("p", form));
}
$.each(json, function(key, row) {
$("<h3>").html(row.Title).appendTo(tObj);
$("<div>").html("<p>" + row.Definition + "</p>").appendTo(tObj);
});
}
});
更新2
确保您在头部加载正确的库。您表明您正在使用:
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
这会加载相同的库两次,只是首先加载“最小”版本。我会删除两者中的第二个。
不知道SP是否使用jQuery。如果它尚未加载,您需要确保将其包含在 header 中。
如果没有,您可以执行以下操作:
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
正如您所提到的,在评论中,我忘记包含初始函数的最终运行:
GetItems();
在关闭最终包装器之前添加此内容以确保它得到执行。
更新3
尝试以下脚本代码:
$(function() {
var n = new Date();
function log(msg) {
var t = new Date();
var d = t - n;
console.log(d, msg);
}
function GetItems() {
var siteURL = _spPageContextInfo.webServerRelativeUrl;
log("GetItems: Start: " + siteURL);
$.ajax({
url: siteURL + "/_api/web/lists/GetByTitle('glossary of terms')/items", //change the list name
type: "GET",
dataType: "json",
headers: {
Accept: "application/json;odata=verbose"
},
success: function(data) {
if (data.d.results.length > 0) {
$('#accordion').append(GenerateAccordionFromJson(data.d.results));
$("#accordion").accordion({
collapsible: true,
active: false,
});
} else {
$('#accordion').append("<span>No Records Found.</span>");
}
},
error: function(error) {
log("GetItems: Error: " + JSON.stringify(error));
}
});
log("GetItems: Complete");
}
function GenerateAccordionFromJson(objArray) {
log("GenAccord: Started");
var accordionContent = "";
for (var i = 0; i < objArray.length; i++) {
accordionContent += '<h3>' + objArray[i].Title + '</h3>';
accordionContent += '<div><p>' + objArray[i].Definition + '</p></div>';
}
log("GenAccord: Complete");
return accordionContent;
}
GetItems();
});
然后您可以查看控制台并应该看到所有正在运行的操作。如果没有详细信息,请查找警报或错误。
希望有帮助。
关于javascript - 如何在 jQuery Accordions 中实现即时搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658319/
我已经四处寻找我的问题的解决方案,但它们似乎都涉及看似复杂的方法,如数据透视表、交叉表等。似乎必须有一个更简单的解决方案来解决那些没有解决的问题在我看来是一个特别复杂的问题。我正在使用 MS SQL
我在共享服务器上安装了 MySQL,并且可以通过 phpMyAdmin 进行访问。我想将该数据库连续实时克隆到云 mySQL 数据库(我们专门为此数据库创建了一个支持 Nginx 的 MySQL 服务
我目前正在围绕一个相当复杂的数据模型编写一个 Django 应用程序。对于许多用例,我需要构建相似但略有不同的模板(包括 graphviz 等)。 现在我想知道是否有一种方法可以遵循 DRY 并“即时
我选择了图片并在提交表单之前进行了预览。但是我想在选择图像并预览并提交文件后即时编辑文件。 js代码: var img = null; var canvas1 = document.g
目前,我们的网站存储 2/3 的固定图像尺寸。这些在上传时生成并通过我们的 CDN 分发。然而,我们需要实现更灵活的解决方案,我们正在开发需要多种不同尺寸的移动和平板电脑应用程序。我们建议的解决方案是
在 Google Wave 的介绍视频中,他们谈到了网络应用程序中的聊天问题。在许多 Web 应用程序中,您会看到如下消息: is typing.. (消息提交前) Google 想出了一个想法“在键
这个问题在这里已经有了答案: Formatting a number with leading zeros in PHP [duplicate] (11 个回答) 关闭3年前. PHP - 是否有一种
如何在VBA的“即时”窗口中打印二维数组?是否存在执行此操作的通用方法?一种在“即时”窗口中为每行绘制一排数组的方法可以解决此问题,因为唯一要做的就是为数组的每一行循环此代码。 最佳答案 我做了一个简
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给出一个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)动态(或称为即时)编译为通常更快的
我已经在我的 Windows 2003 服务器上安装了 VisualSVN,并将其配置为提供匿名读取访问。据我了解,VisualSVN 仅使用 apache 和下面的官方 SVN 存储库服务器。 现在
我正在开发一个使用 Twig 的 PHP 应用程序(但这并不重要)作为 View 层。这个 View 层有一个自定义扩展,允许我注册远程样式和脚本 Assets 以及样式和脚本内联 block 。系统
如今在许多网页上,您会经常看到带有指向目标的箭头的即时工具提示,类似于: https://www.w3schools.com/css/tryit.asp?filename=trycss_tooltip
我正在用 C++ 编写并在 Windows 中使用 OpenGL。 我创建了一个立方体,我希望它通过按“4”或“6”小键盘键围绕 y 轴旋转(使用 glRotate3f(),而不是 gluLookat
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给出一个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)动态(或称为即时)编译为通常更快的
这个问题在这里已经有了答案: 关闭 10 年前。
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)即时(或所谓的即时)编译成通常速度更快
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)即时(或所谓的即时)编译成通常速度更快
我希望能够即时将音频文件转换为 MP3 以供用户浏览器使用。我正在使用的软件是:ubuntu 系统上的 Apache、PHP 和 FFMPEG。这是我到目前为止的代码: 使用此代码,仅转换音频的前几
我正在使用 IntervalObservable 连续调用我的应用程序的服务器端。我可以订阅和取消订阅 Oberservable,一切正常,但有一个异常(exception): 对服务器的第一次调用被
从服务器上的文件夹压缩(比如 2 个文件)并强制下载的最简单方法是什么?不将“zip”保存到服务器。 $zip = new ZipArchive(); //the string "fil
我是一名优秀的程序员,十分优秀!