JQuery 搜索并比较数组中的部分单词
JQuery search and compare part of word in array
我是 JQuery 的新手,我遇到了第一个问题! ;)
我想从许多 url.
的数组中搜索特定的 word/number
- 我在“aLinks”数组中列出 URLs。
- aLinks 的 URL 格式为 "../page/article?359&lng=5"
- 我还有第二个 table 需要查找参考值(例如:["359","686"])
我尝试了几种方法,但是 只找到完整的 URL 匹配,而从来没有只找到“359”,这是我的值之一我正在寻找...
我猜是因为它不是子字符串(句子中没有 space)?
我能做什么,使用正则表达式搜索?匹配?
/* 01 - Parse links in aLinks array */
jQuery(document).ready(function parseLink() {
var aLinks = $('a.link.article').map( function() {
return $(this).attr('href');
}).get();
/* 02 - Loop and search over array */
var refArray = ['359', '../page/article?686&lng=5'];
$.each(aLinks, function(idx, value) {
if ($.inArray(value, refArray) !== -1) {
console.log('MATCH : ' + value);
/*
Only the second index works... because isn't a substring ?
*/
} else {
console.log('NOT MATCH: ' + value);
}
});
});
谢谢!
最好的祝福,
菲兹
编辑:使用 cheesyMan 的解决方案,我只是添加了 urlStart 和 urlEnd 的连接:
urlStart = '../page/article?';
urlEnd = '&lng='
$.each(aLinks, function(idx, val) {
let matching = false;
for (let i = 0; i < compare.length; i++) {
if (val.includes(urlStart + compare[i] + urlEnd)) {
console.log(`${val} MATCHED!`);
matching = true;
}
}
if (!matching) console.log(`${val} DID NOT MATCH...`)
})
没关系,非常感谢!!
这里我有一个搜索#SUuL1 输入的脚本。来自 #uList1 并将其替换为标记标签。不完全是您正在寻找的东西,但它是您可以 fiddle 使用的东西。实际上,您正在寻找的部分是 RegExp。 // 搜索所有✌️
let searched = document.getElementById("SUuL1").value.trim();
if (searched !== "") {
let text = document.getElementById("uList1").innerHTML;
let re = new RegExp(searched+ "(?![^<>]*>)","ig"); // search for all
let newText = text.replace(re, `<mark>${searched}</mark>`);
document.getElementById("uList1").innerHTML = newText;
}
在您的 $.each()
循环中,您将 aLinks[]
中的每个 link 与 refArray[]
中的值进行比较,使用 strict equality.
因此,第一个数组 (aLinks
) 的每个值必须 严格等于 (===
) 第二个数组的元素之一(refArray
).
我认为您需要在 $.each 中嵌套循环(将每个 link 与每个引用进行比较)并将它们与 includes()
. Also substring()
进行比较在这种情况下可能很有用。
我在这段代码中使用了一些假数组,不知道它们是否适合您的数据。
const compare = [
'389', '423', '../page/article?915&lng=5', '212', '../page/article?686&lng=3'
]
const links = [
'../page/article?359&lng=5', '../page/article?389&lng=2', '../page/article?459&lng=4', '../page/article?212&lng=1', '../page/article?915&lng=5'
]
$.each(links, function(idx, val) {
let matching = false;
for (let i = 0; i < compare.length; i++) {
if (val.includes(compare[i])) {
console.log(`${val} MATCHED!`);
matching = true;
}
}
if (!matching) console.log(`${val} DID NOT MATCH...`)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我是 JQuery 的新手,我遇到了第一个问题! ;) 我想从许多 url.
的数组中搜索特定的 word/number- 我在“aLinks”数组中列出 URLs。
- aLinks 的 URL 格式为 "../page/article?359&lng=5"
- 我还有第二个 table 需要查找参考值(例如:["359","686"])
我尝试了几种方法,但是 只找到完整的 URL 匹配,而从来没有只找到“359”,这是我的值之一我正在寻找...
我猜是因为它不是子字符串(句子中没有 space)? 我能做什么,使用正则表达式搜索?匹配?
/* 01 - Parse links in aLinks array */
jQuery(document).ready(function parseLink() {
var aLinks = $('a.link.article').map( function() {
return $(this).attr('href');
}).get();
/* 02 - Loop and search over array */
var refArray = ['359', '../page/article?686&lng=5'];
$.each(aLinks, function(idx, value) {
if ($.inArray(value, refArray) !== -1) {
console.log('MATCH : ' + value);
/*
Only the second index works... because isn't a substring ?
*/
} else {
console.log('NOT MATCH: ' + value);
}
});
});
谢谢! 最好的祝福, 菲兹
编辑:使用 cheesyMan 的解决方案,我只是添加了 urlStart 和 urlEnd 的连接:
urlStart = '../page/article?';
urlEnd = '&lng='
$.each(aLinks, function(idx, val) {
let matching = false;
for (let i = 0; i < compare.length; i++) {
if (val.includes(urlStart + compare[i] + urlEnd)) {
console.log(`${val} MATCHED!`);
matching = true;
}
}
if (!matching) console.log(`${val} DID NOT MATCH...`)
})
没关系,非常感谢!!
这里我有一个搜索#SUuL1 输入的脚本。来自 #uList1 并将其替换为标记标签。不完全是您正在寻找的东西,但它是您可以 fiddle 使用的东西。实际上,您正在寻找的部分是 RegExp。 // 搜索所有✌️
let searched = document.getElementById("SUuL1").value.trim();
if (searched !== "") {
let text = document.getElementById("uList1").innerHTML;
let re = new RegExp(searched+ "(?![^<>]*>)","ig"); // search for all
let newText = text.replace(re, `<mark>${searched}</mark>`);
document.getElementById("uList1").innerHTML = newText;
}
在您的 $.each()
循环中,您将 aLinks[]
中的每个 link 与 refArray[]
中的值进行比较,使用 strict equality.
因此,第一个数组 (aLinks
) 的每个值必须 严格等于 (===
) 第二个数组的元素之一(refArray
).
我认为您需要在 $.each 中嵌套循环(将每个 link 与每个引用进行比较)并将它们与 includes()
. Also substring()
进行比较在这种情况下可能很有用。
我在这段代码中使用了一些假数组,不知道它们是否适合您的数据。
const compare = [
'389', '423', '../page/article?915&lng=5', '212', '../page/article?686&lng=3'
]
const links = [
'../page/article?359&lng=5', '../page/article?389&lng=2', '../page/article?459&lng=4', '../page/article?212&lng=1', '../page/article?915&lng=5'
]
$.each(links, function(idx, val) {
let matching = false;
for (let i = 0; i < compare.length; i++) {
if (val.includes(compare[i])) {
console.log(`${val} MATCHED!`);
matching = true;
}
}
if (!matching) console.log(`${val} DID NOT MATCH...`)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>