首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >找到某种类型的孩子

找到某种类型的孩子
EN

Stack Overflow用户
提问于 2016-06-01 16:58:08
回答 3查看 3.2K关注 0票数 2

我的页面中有一个包含所有forms的数组。我想遍历所有的表单,并在它们中找到按钮。如何在没有任何库的情况下,仅在Javascript中实现这一点?

这是我的JS代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var forms = document.querySelectorAll('form');

for(var i = 0; i < forms.length; i++;){
    var form = forms[i];
    form.addEventListener('submit', validateForm);
}

function validateForm(e){
    e.preventDefault();    
    var button = ?; // I want to get the button that is a child of this form
}

我知道我可以使用它来获取窗体的所有子元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var buttons = document.querySelectorAll('form button');

但是,我如何才能得到一个按钮,它是这个表单的子程序?

我见过这个问题问了很多次,但总是找到父母的孩子,有一个特定的id或类似的东西。我不知道页面中会有多少个表单,我也无法控制它们是否具有唯一的id或任何其他在使用querySelectorAll()时可以用来区分它们的东西。

有可能实现我想要的吗?

我在jQuery中寻找纯JS替代方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var $form = $('form');
var $childButton = $form.find('button');
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-01 17:01:15

元素具有querySelector/的等效版本,因此可以从元素和文档中调用。因此,如果要在表单元素中寻找一个按钮,只需从表单元素调用querySelector即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var form = document.querySelector("#SomeForm");
//Will find the first button in the form
var someBtn = form.querySelector("button");
//Will find all buttons in the form.
var someBtns = form.querySelectorAll("button");

演示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let forms = document.querySelectorAll("form");
[].forEach.call(forms,form=>{
   form.querySelector("button").innerText += " - Modified";
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form>
  <button>A button</button><br>
  <input><input>
</form>
<form><br><br>
  <button>B button</button><br>
  <input><input><br>
  <button>C button</button>
</form><br><br>
<form>
  <button>D button</button><br>
  <input><input>
</form>

票数 6
EN

Stack Overflow用户

发布于 2016-06-01 17:06:17

如果要选择第一个button后代,可以使用querySelector

但是如果你想确保它是一个孩子,那么你可以使用[].find

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[].find.call(form.children, function(child) {
  return child.tagName.toLowerCase() === 'button';
});

或者,一些浏览器支持:scope psudo类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
form.querySelector(":scope > button");

希望它不会连同限定范围的样式表和@scope at-规则一起删除。

票数 0
EN

Stack Overflow用户

发布于 2016-06-01 18:29:50

你的问题还不太清楚。有一个document.forms集合,它是文档中按DOM顺序排列的所有表单,因此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var firstForm = document.forms[0];

会得到第一份表格。如果您的按钮有名称,则可以使用以下方法获得第一个表单中的名称为"Fred“的按钮:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fred = document.forms[0].Fred;

或第一种形式中的第一个按钮:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var firstButton = document.forms[0].querySelector('button');

或第一种形式中的所有按钮都具有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var firstButton = document.forms[0].querySelectorAll('button');

诸若此类。请注意,表单控件可以使用form属性与窗体关联,但不能在窗体内。例如。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form id="foo">
  <!--  stuff in the form -->
</form>
<button type="submit" for="foo">Submit the form</button>

在这种情况下,querySelector语法失败,但表单属性访问没有失败,因此您可能需要遍历表单的元素集合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for var i=0, firstButton; i<firstForm.elements.length; i++) {
  if (firstForm.elements[i].tagName.toLowerCase() == 'button') {
    // This is the first button associated with the form, 
    // even if not actually in the form
  }
}

因此,如果您想涵盖每一种情况,您的代码需要非常通用。但是,如果您缩小了可能的场景,代码就会简单得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37581058

复制
相关文章
[剑指offer] 斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39
尾尾部落
2018/09/04
6480
斐波那契数列
如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f(2) 被重复计算了。
MickyInvQ
2022/05/06
4240
斐波那契数列
斐波那契数列
我们都知道斐波那契数(也叫兔子数)是一组十分有趣的数字,首相为1,第二项也是1,之后的每一项就是前两项之和,那么该如何实现输入第n项就打印其对应的斐波那契数字呢?
用户9996207
2023/01/13
4990
斐波那契数列
斐波那契数列的第n+2项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。
饶文津
2020/05/31
7020
斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2) 显然这是一个线性递推数列。 代码实现
呆呆
2021/10/06
3920
斐波那契数列
斐波那契数列【别名黄金分割数列、兔子数列】 斐波那契数列的特点:第1,2两个数为1,1。从第三个数开始,该数是其前两个数之和。
司六米希
2022/11/15
5330
斐波那契数列
斐波那契数列
斐波那契数列的核心就是F(N) = F(N-1) + F(N-2),一般看到的都会采用递归,但是如果使用循环来实现且进行对比,容易发现不少对真是性能的影响
忧愁的chafry
2022/10/30
4600
斐波那契数列
斐波那契数列和斐波那契数
        斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
会洗碗的CV工程师
2022/11/29
7560
斐波那契数列和斐波那契数
[每日一题]斐波那契数列
问题 1131: 【C语言训练】斐波纳契数列 题目描述 斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。 输入 一个整数N(N不能大于40) 输出 由N个“斐波纳契数”组成的“斐波纳契数列”。 样例输入 6 样例输出 1 1 2 3 5 8 提示 这类题目可能会涉及一些数学知识、逻辑锻炼、模拟问题等等,需要大家对C语言语法能熟练运用之后用来训练提高。 也可以自行查找知识,不明白可以在讨论版中讨论学习。
编程范 源代码公司
2018/04/16
8370
斐波那契数列
递归求解方法 class Solution { public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib(n - 1)+fib(n - 2); } };
大忽悠爱学习
2022/05/05
4480
斐波那契数列
斐波那契数列
问题斐波那契数列。(斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。前两项相加等于第三项)
算法与编程之美
2022/02/17
6160
斐波那契数列
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
木子星兮
2020/07/17
7060
斐波那契数列
#include <iostream> using namespace std; int n,a,b,p; int f(int x){ if(x <= 2){ return 1; } return (a*f(x-1)+b*f(x-2))%p; } int main() { cin>>n>>a>>b>>p; cout<<f(n)<<endl; return 0; }
且陶陶
2023/04/12
3360
斐波那契数列
斐波那契数列
斐波那契数列,1,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89, 144,. 如果设F(n)为该数列的第n 项( n ∈N* ),那么数列有如下形式,F(n)=F(n-1)+F(n 2)。
砖业洋__
2023/05/06
2330
斐波那契数列
刷抖音突然刷到了斐波那契数列,突发奇想就用java写一个斐波那契数列。虽然很早之前学习算法,这应该是最基本的,但是对于一个干着普普通通工作的我已经是需要深思熟虑一番。
cultureSun
2023/09/02
2560
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. public class Fibonacci { public static int[] record = null; public int Fibonaci(int n){ if(n<=1){ return n; } if(null == record){ record = new int[n+1];
用户3003813
2018/09/06
3910
[算法] - 斐波那契数列
牛客网 NC65-斐波那契数列 两种实现 迭代 public class Solution { public int Fibonacci(int n) { if(n == 0 || n == 1){ return n; } int a = 0; int b = 1; int fib = 0; for(int i = 2; i <= n; i++){
夹胡碰
2021/06/17
8050
斐波那契数列的N种算法
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。
用砖头敲代码
2022/08/30
2960
Python|斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
算法与编程之美
2020/04/20
8110
Python|斐波那契数列
打印 斐波那契数列
方法一;递归(可以达到逐个输出的目的) public class FibonacciTest { public long fibonacci(long number){ if (number==0||number==1){ return number; }else{ // 该方法里调该方法 return fibonacci(number-1)+fibonacci(number-2);
传说之下的花儿
2023/04/16
1610

相似问题

如何将output子文件夹设置为在生成时将引用dll复制到

15

如何将生成的图形复制到子文件夹?

20

如何将nupkg从生成过程复制到删除文件夹

11

如何使生成将内容从引用库复制到IIS express文件夹?

24

如何将文件复制到时间戳自动生成的文件夹?

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文