jQuery: 如何找到用户名输入字段?
jQuery: how to find username input field?
我试过了
var input = $('input:password');
if(input.length>0){
var form = input[0].closest("form");
console.log($('#'+form.id).find('*').filter(':input:visible:first'));
}
但它没有找到用户输入字段
我想写一个 chrome 扩展,在登录表单中预填用户名和密码。
通过 var input = $('input:password');
我已经能够找到密码输入了。但我需要找到一种方法来找到用户名输入字段(第一个在密码之前可见)
有没有办法获取用户名输入和密码输入?
您可以尝试类似的方法,但不能保证一定有效。
var password = $('input:password');
if (password.length > 0) {
var inputs = $("input");
var ind = inputs.index(password);
var username = inputs.eq(ind - 1);
}
演示
var password = $('input:password');
if (password.length > 0) {
var inputs = $("input");
var ind = inputs.index(password);
var username = inputs.eq(ind - 1);
console.log(username)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div><input type="text" /></div>
<input type="password">
方式 1. 简单算法:表单的第一个可见输入字段是用户名
fiddle: https://codepen.io/anon/pen/jooZQJ
var input = $('input:password');
console.log(input[0]);
if(input.length>0){
var form = input[0].closest("form");
console.log($(form).find('*').filter('input:visible:first')[0]);
}
方式 2. 复杂算法:检查包含词的占位符、标签和输入值:"username"(不区分大小写)。如果没有这样的输入,则执行方法 1。
棘手的部分还在于获取输入的标签。该算法检查标签是否通过 "for" 等于输入的 id 的属性绑定到输入,或者它只是在输入元素之前。
fiddle: https://codepen.io/anon/pen/RmmJwG
var input = $('input:password');
console.log(input[0]);
if(input.length>0){
var form = input[0].closest("form");
var canditates = $(form).find('input:visible');
var found = null;
for(var i =0; i<canditates.length; i++){
var labelTag = getLabel(canditates[i]);
if(($(canditates[i]).attr('placeholder')
&& $(canditates[i]).attr('placeholder').toLowerCase().indexOf('username') >= 0)
|| $(labelTag).text().toLowerCase().indexOf('username') >= 0
|| $(canditates[i]).val().toLowerCase().indexOf('username') >=0 ){
found = canditates[i];
break;
};
}
var username = found ? found : canditates[0];
console.log(username);
}
function getLabel(input){
var label = $('label[for="' + $(input).attr('id') + '"]');
if(label.length <= 0) {
var parentElem = $(input).parent();
if(parentElem.length == 0)return;
var parentTagName = parentElem.get(0).tagName.toLowerCase();
if(parentTagName == "label") {
label = parentElem;
}
}
if(label.length == 0){
label = $(input).prev().filter('label');
label = label.attr('for') ? undefined : label;
}
if(label && label.length > 0)return label[0];
else return null;
}
我试过了
var input = $('input:password');
if(input.length>0){
var form = input[0].closest("form");
console.log($('#'+form.id).find('*').filter(':input:visible:first'));
}
但它没有找到用户输入字段
我想写一个 chrome 扩展,在登录表单中预填用户名和密码。
通过 var input = $('input:password');
我已经能够找到密码输入了。但我需要找到一种方法来找到用户名输入字段(第一个在密码之前可见)
有没有办法获取用户名输入和密码输入?
您可以尝试类似的方法,但不能保证一定有效。
var password = $('input:password');
if (password.length > 0) {
var inputs = $("input");
var ind = inputs.index(password);
var username = inputs.eq(ind - 1);
}
演示
var password = $('input:password');
if (password.length > 0) {
var inputs = $("input");
var ind = inputs.index(password);
var username = inputs.eq(ind - 1);
console.log(username)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div><input type="text" /></div>
<input type="password">
方式 1. 简单算法:表单的第一个可见输入字段是用户名
fiddle: https://codepen.io/anon/pen/jooZQJ
var input = $('input:password');
console.log(input[0]);
if(input.length>0){
var form = input[0].closest("form");
console.log($(form).find('*').filter('input:visible:first')[0]);
}
方式 2. 复杂算法:检查包含词的占位符、标签和输入值:"username"(不区分大小写)。如果没有这样的输入,则执行方法 1。
棘手的部分还在于获取输入的标签。该算法检查标签是否通过 "for" 等于输入的 id 的属性绑定到输入,或者它只是在输入元素之前。
fiddle: https://codepen.io/anon/pen/RmmJwG
var input = $('input:password');
console.log(input[0]);
if(input.length>0){
var form = input[0].closest("form");
var canditates = $(form).find('input:visible');
var found = null;
for(var i =0; i<canditates.length; i++){
var labelTag = getLabel(canditates[i]);
if(($(canditates[i]).attr('placeholder')
&& $(canditates[i]).attr('placeholder').toLowerCase().indexOf('username') >= 0)
|| $(labelTag).text().toLowerCase().indexOf('username') >= 0
|| $(canditates[i]).val().toLowerCase().indexOf('username') >=0 ){
found = canditates[i];
break;
};
}
var username = found ? found : canditates[0];
console.log(username);
}
function getLabel(input){
var label = $('label[for="' + $(input).attr('id') + '"]');
if(label.length <= 0) {
var parentElem = $(input).parent();
if(parentElem.length == 0)return;
var parentTagName = parentElem.get(0).tagName.toLowerCase();
if(parentTagName == "label") {
label = parentElem;
}
}
if(label.length == 0){
label = $(input).prev().filter('label');
label = label.attr('for') ? undefined : label;
}
if(label && label.length > 0)return label[0];
else return null;
}