Javascript 如果数组中存在url,请执行某些操作
我有一个简单的表单,用户可以输入“tweet”。我在幕后使用了一些javascript来控制输入url时发生的事情 如果输入一个url,如test.com,则会出现一个新的输入字段 如果输入了存储在数组中的url,它将显示新的输入字段以及选择选项 以下是我的javascript:Javascript 如果数组中存在url,请执行某些操作,javascript,jquery,Javascript,Jquery,我有一个简单的表单,用户可以输入“tweet”。我在幕后使用了一些javascript来控制输入url时发生的事情 如果输入一个url,如test.com,则会出现一个新的输入字段 如果输入了存储在数组中的url,它将显示新的输入字段以及选择选项 以下是我的javascript: var test = ["test1.com", "test2.com", "test3.com"]; $('#tweet_text_ga').hide(); $('#custom_alias').hide(); $(
var test = ["test1.com", "test2.com", "test3.com"];
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keydown(function () {
var val = this.value;
if (/\.[a-zA-Z]{2,3}/ig.test(val)) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
if ($.inArray(val, test) !== -1) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
});
如果只输入一个url,它就可以正常工作。但只要添加更多文本,它就会忽略url是否在数组中,并删除select选项。我不太清楚如何更好地解释这一点,所以我设置了一个小提琴来说明我的意思
我希望有人能理解我,并为我指出正确的方向
这是因为您正在检查整个输入是否在数组中:
如果($.inArray(val,test)!=-1)
。您需要使用正则表达式从输入中检索URL并进行检查
编写一个正则表达式来检索任何URL,获取该URL并检查它是否是您的幸运URL之一:
var urlsInInput = /[a-z0-9]+\.[a-zA-Z]{2,3}/ig.exec(val);
if (urlsInInput.length == 1 && $.inArray(urlsInInput[0], test) !== -1) {
而不是
if ($.inArray(val, test) !== -1) {
这是因为您正在检查数组中是否有整个输入:
如果($.inArray(val,test)!=-1)
。您需要使用正则表达式从输入中检索URL并进行检查
编写一个正则表达式来检索任何URL,获取该URL并检查它是否是您的幸运URL之一:
var urlsInInput = /[a-z0-9]+\.[a-zA-Z]{2,3}/ig.exec(val);
if (urlsInInput.length == 1 && $.inArray(urlsInInput[0], test) !== -1) {
而不是
if ($.inArray(val, test) !== -1) {
这是我处理第一个url的版本
这是我处理第一个url的版本
斯莱德说了些什么。下面是如何使用当前的测试阵列
var reg = new RexExp(test.join('|').replace(/\./ig, "\\."), 'ig')
if( reg.test(val) ) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
斯莱德说了些什么。下面是如何使用当前的测试阵列
var reg = new RexExp(test.join('|').replace(/\./ig, "\\."), 'ig')
if( reg.test(val) ) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
活动字段再次开始消失的原因是您将输入的整个值与数组进行比较。如果您只是找到所有域匹配项,然后将它们与您的阵列进行比较,那么它应该可以工作 像这样:
var test = ["test1.com", "test2.com", "test3.com"];
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keyup(function () {
var alias = false;
var campaign = false;
var domain = /([a-z0-9]+(:?[\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6})/ig;
var val = this.value;
var match = val.match(domain);
if (match) {
alias = true;
match.forEach(function(e) {
campaign = campaign || ($.inArray(e, test) !== -1);
});
}
if (alias === true) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
if (campaign === true) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
});
活动字段再次开始消失的原因是您将输入的整个值与数组进行比较。如果您只是找到所有域匹配项,然后将它们与您的阵列进行比较,那么它应该可以工作 像这样:
var test = ["test1.com", "test2.com", "test3.com"];
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keyup(function () {
var alias = false;
var campaign = false;
var domain = /([a-z0-9]+(:?[\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6})/ig;
var val = this.value;
var match = val.match(domain);
if (match) {
alias = true;
match.forEach(function(e) {
campaign = campaign || ($.inArray(e, test) !== -1);
});
}
if (alias === true) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
if (campaign === true) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
});
您的
$有问题。isArray(val,test)
,您使用的值是整个值。
不确定你的目的,所以写一个这样的代码。希望能有帮助
您的
$有问题。isArray(val,test)
,您使用的值是整个值。
不确定你的目的,所以写一个这样的代码。希望能有帮助
最后要实现的是一个数组,其中所有URL都写在textarea中?请改用val.match并查看匹配数据。最后要实现的是一个数组,其中所有URL都写在textarea中?请改用val.match并查看我使用regex查找的匹配数据,但我不确定是否可以对照域数组进行检查?
regex.test(array[index])
我正在研究使用regex,但不确定是否可以对照域数组进行检查?regex.test(array[index])代码>