dom 相关问题

通过文档对象模型,将此标记用于有关其他语言与XML / HTML交互的问题。不要将其用作HTML,JavaScript或SAX的简写 - 使用其他标记来表示语言和标记。

e.matches()方法是否遍历DOM?

e.matches()方法是否必须遍历DOM来评估选择器? 我问是因为以下情况: if ( e.matches('.class_1, .class_1 *') { /* 做一点事。 */ } else if ( e.mat...

回答 3 投票 0

输入触发按键事件两次

这个问题之前已经被问过/回答过(大部分),但是我尝试了三件事来阻止事件冒泡,但没有任何效果: 返回假; e.stopPropagation(); e.preventDefault(); (

回答 10 投票 0

如何创建一个逐个删除元素的函数?

我正在用JavaScript创建一个渐变编辑器,我已经创建了添加颜色的功能,但是我无法创建删除颜色的功能,想法是当访问者右键单击

回答 1 投票 0

为什么 select 标签不能与 datalist 标签一起使用?

在 HTML5 中,引入了 标签(Spec),与 元素一起使用。它包含一组 元素,就像 标签一样。 然而,使用... 在 HTML5 中,引入了 标签 (Spec),与 <input> 元素一起使用。它包含一组 <option> 元素,就像 <select> 标签一样。 但是,使用 <input> 标签允许用户输入自己的文本,其中下拉选项有点像次要功能。而 <select> 标签则强制用户选择已定义的选项之一。 所以我想:为什么不创建一个 <select> 元素,并给它一个数据列表,而不是单独定义每个 <option> 。我有一个项目,在同一页面上有多个 select 元素,它们共享相同的选项集,所以我认为这将是一个很好的优化。然而,这不起作用。可以尝试这里。 现在这不是一个关于如何去做这件事的问题,因为我认为很明显,目前这是不可能的。我也找不到任何提供类似功能的库。我只是好奇为什么这是不可能的。这只是一个疏忽,以后可能会纠正吗?这个想法是否存在我没有想到的重大问题? 这不可能,也不可能。 list 上的属性 <inputs> 不是 <select> 的有效属性。 在此选择规格 在 HTML5 (https://html.spec.whatwg.org/multipage/form-elements.html#the-select-element) 中,SELECT 元素允许 零 内部元素(OPTION、OPTGROUP 或 HR)它的内容模型。它的属性是全局属性(id、style、...)和可选的输入特定属性(名称、表单、必需、大小、多个、禁用和自动完成)。所请求的是一种通过引用将列表指定为属性的方法。如果不可能作为 SELECT 的附加属性,则可以通过插入单个 OPTGROUP 元素作为 SELECT 的内容来实现。 OPTGROUP的内容模型也允许空内容,其输入特定的属性是label(必需)和disabled(可选)。使用全局属性(如 itemid、itemref、itemscope、itemprop...)可以实现此类扩展

回答 0 投票 0

dom-to-image 在尝试从静止视频捕获缩略图时会生成错误的图像

我第一次使用dom-to-image。 我想从使用 HTML5 视频标签显示的静止视频中捕获缩略图。 我正在使用密切基于所提供的示例的代码......

回答 1 投票 0

为什么 javascript 控制台说“htmlmenubutton”未定义,但我很确定它是[关闭]

我正在为学校制作一个项目,当我测试它时,我正在为其制作一个下拉菜单,JavaScript控制台显示:“htmlmenubutton”的定义与cssmenubutton不同&

回答 1 投票 0

当我使用Javascript单击删除按钮时,如何从DOM中删除TODO项目列表?

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TODO app</title> </head> <script> function deleteDone(id) { console.log("Deleted todo ID:", id); // Delete the right todo from the list // You will need to give each todo an id, and that should be enough to remove it } function deleteTodo(id) { fetch("http://localhost:3000/todos/" + id, { method: "DELETE", headers: { "Content-Type": "application/json" } }).then(deleteDone) } function getTodoscallBack(data){ console.log(data); var parentElement = document.getElementById("mainArea"); // parentElement.innerHTML = JSON.stringify(data); for(var i=0;i<data.length;++i){ var childElement = document.createElement("div"); var grandChildren1 = document.createElement("span"); grandChildren1.innerHTML= data[i].title; var grandChildren2 = document.createElement("span"); grandChildren2.innerHTML= data[i].description; var grandChildren3 = document.createElement("button"); grandChildren3.innerHTML="Delete"; grandChildren3.setAttribute("onclick","deleteTodo("+data[i].id+")"); childElement.appendChild(grandChildren1); childElement.appendChild(grandChildren2); childElement.appendChild(grandChildren3); parentElement.appendChild(childElement); } } function callbackFn2(res){ res.json().then(getTodoscallBack); } function getData(){ fetch("http://localhost:3000/todos",{ method:"GET", }).then(callbackFn2); } getData(); function parsedResponse(data){ console.log(data); var parentElement = document.getElementById("mainArea"); var childElement = document.createElement("div"); var grandChildren1 = document.createElement("span"); grandChildren1.innerHTML= data.title; var grandChildren2 = document.createElement("span"); grandChildren2.innerHTML= data.description; var grandChildren3 = document.createElement("button"); grandChildren3.innerHTML="Delete"; childElement.appendChild(grandChildren1); childElement.appendChild(grandChildren2); childElement.appendChild(grandChildren3); parentElement.appendChild(childElement); } function callback(res){ res.json().then(parsedResponse); } function onPress(){ var title = document.getElementById("title").value; var description = document.getElementById("description").value; console.log(title,"\n",description); fetch("http://localhost:3000/todos",{ method:"POST", body: JSON.stringify({ title: title, description:description }), headers: { "Content-Type": "application/json" } }).then(callback); } </script> <body> Todo title <input type="text" id="title"></input> <br><br> Todo description <input type="text" id="description"></input> <br><br> <button onclick="onPress()">send todo</button> <div id="mainArea"> </div> </body> </html> 在 TODO 项目的删除功能中,我想删除具有给定 id 的特定待办事项,但我在选择父级(即 div 标签)时遇到困难,其中我存储了标题描述和删除按钮,我通过使用 javascript 发送请求来添加该按钮。问题如何使用removeChild()删除具有id的特定删除按钮的div标签?如何做到这一点? 我复制了与您完全相同的代码,并传递了一个伪造的数组来建模待办事项,就像您已经做的那样 const todos = [{ id: 1, title: 'title#1', description: 'description#1' }, { id: 2, title: 'title#2', description: 'description#2' }]; 为了与您的策略保持一致,在创建待办事项的逻辑中,我添加了使用相应的待办事项 id 设置每个删除按钮的 data-id 属性的功能,然后在 deleteDone 函数中我获取了单击的删除使用属性选择器按钮,然后删除使用 div 检索到的整个 closest 容器。 const todos = [{ id: 1, title: 'title#1', description: 'description#1' }, { id: 2, title: 'title#2', description: 'description#2' }]; getTodoscallBack(todos); function deleteDone(id) { console.log("Deleted todo ID:", id); //retrieves the delete button holding the data-id attribute passed const delButton = document.querySelector(`[data-id="${id}"`); //retrieves the element containing that button const todoContainer = delButton.closest('div'); //removes the whole div containing the todo todoContainer.remove(); } function deleteTodo(id) { /* fetch("http://localhost:3000/todos/" + id, { method: "DELETE", headers: { "Content-Type": "application/json" } }).then(deleteDone) */ deleteDone(id); } function getTodoscallBack(data) { console.log(data); var parentElement = document.getElementById("mainArea"); // parentElement.innerHTML = JSON.stringify(data); for (var i = 0; i < data.length; ++i) { var childElement = document.createElement("div"); var grandChildren1 = document.createElement("span"); grandChildren1.innerHTML = data[i].title; var grandChildren2 = document.createElement("span"); grandChildren2.innerHTML = data[i].description; var grandChildren3 = document.createElement("button"); grandChildren3.innerHTML = "Delete"; grandChildren3.setAttribute("onclick", "deleteTodo(" + data[i].id + ")"); //HERE I set the data-id attribute value as data[i].id grandChildren2.dataset.id = data[i].id; childElement.appendChild(grandChildren1); childElement.appendChild(grandChildren2); childElement.appendChild(grandChildren3); parentElement.appendChild(childElement); } } function callbackFn2(res) { res.json().then(getTodoscallBack); } function getData() { fetch("http://localhost:3000/todos", { method: "GET", }).then(callbackFn2); } getData(); function parsedResponse(data) { console.log(data); var parentElement = document.getElementById("mainArea"); var childElement = document.createElement("div"); var grandChildren1 = document.createElement("span"); grandChildren1.innerHTML = data.title; var grandChildren2 = document.createElement("span"); grandChildren2.innerHTML = data.description; var grandChildren3 = document.createElement("button"); grandChildren3.innerHTML = "Delete"; childElement.appendChild(grandChildren1); childElement.appendChild(grandChildren2); childElement.appendChild(grandChildren3); parentElement.appendChild(childElement); } function callback(res) { res.json().then(parsedResponse); } function onPress() { var title = document.getElementById("title").value; var description = document.getElementById("description").value; console.log(title, "\n", description); fetch("http://localhost:3000/todos", { method: "POST", body: JSON.stringify({ title: title, description: description }), headers: { "Content-Type": "application/json" } }).then(callback); } <body> Todo title <input type="text" id="title"> <br><br> Todo description <input type="text" id="description"> <br><br> <button onclick="onPress()">send todo</button> <div id="mainArea"> </div> </body>

回答 1 投票 0

如何控制一个元素滚动另一个元素

正如你可以看到我的html的结构,我试图将光标定位在屏幕的左列并向下滚动,这样我就不会在正文内滚动并转到页脚,而是......

回答 1 投票 0

在 React.js 中实现“阅读更多”链接

我正在尝试实现一个“阅读更多”链接,该链接展开以显示 单击后显示更多文本。我正在尝试以 React 的方式做到这一点。 Lorem Ipsum 是... 我正在尝试实现一个 Read More 链接,该链接会展开以显示 单击后显示更多文本。我正在尝试以 React 方式做到这一点。 <!--html--> <div class="initialText"> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. <a> Read More </a> </div> <div class="fullText"> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. </div> /* JavaScript */ /* @jsx DOM */ var component = React.createClass({ getInitialState: function() { return { expanded: false }; }, expandedText: function() { this.setState({ expanded: true }); }, render: function() { return ( <div> </div> ); } }); 我是 React 新手。我不确定如何处理渲染方法中的所有内容。如何在纯 React 中实现此功能? 所以基本上你想根据状态属性“expanded”显示一个额外的 div。 您可以有条件地创建组件。如果你不想要一个组件,你可以直接返回 null。 我只想有一个小方法,例如: var component = React.createClass({ getInitialState: function() { return { expanded: false }; }, expandedText: function() { this.setState({ expanded: true }); }, getMoreTextDiv: function() { if (this.state.expanded) { return <div> My extended content </div>; } else { return null; } } }); 你的渲染函数应该变成: render: function() { var expandedDiv = this.getMoreTextDiv(); return ( <div> <a onClick={this.expandedText}>Read more</a> { expandedDiv } </div> ); } 每次调用 setState() 时,都会使用新状态触发 render()。 如果 Expanded 为 false,您将返回 null 作为组件,这基本上意味着什么都没有。所以什么也不会显示。 当您单击链接时,它将更新您的状态和展开的值,因此您将返回一个 div 作为组件并将其显示。 我认为阅读this是一个好的开始。 这是一篇非常棒的文章,解释了渲染的基本工作原理以及与状态的链接。 您还应该确保您理解这种小示例 http://jsfiddle.net/3d1jzhh2/1/ 以了解状态和渲染如何相互链接。 再次迟到回答,但也许有人会需要它。 所以基本上你只需要一个组件来接收你想要显示的文本。 然后,您将使用 useState 钩子来设置文本长度的值 - 是否需要显示短版本或长版本,最后一个函数将在文本的短版本和长版本之间切换。 代码示例: import React, { useState } from 'react'; const ReadMore = ({text}) => { const [isReadMore, setIsReadMore] = useState(true); const toggleReadMore = () => {setIsReadMore(!isReadMore)}; return ( <p className='testimonials__quote__text'> {isReadMore ? text.slice(0, 150): text } // condition that will render 'read more' only if the text.length is greated than 150 chars {text.length > 150 && <span onClick={toggleReadMore}> {isReadMore ? '...read more' : ' ...show less'} </span> } </p> ) } export default ReadMore; 您可以尝试 read-more-react 库,链接:https://www.npmjs.com/package/read-more-react npm install --save read-more-react import ReadMoreReact from 'read-more-react'; <ReadMoreReact text={yourTextHere} min={minimumLength} ideal={idealLength} max={maxLength} /> 你几乎走在正确的轨道上。正如反应文档中所述: https://facebook.github.io/react/tips/if-else-in-JSX.html 它只是使用经典的 if 和一个变量,如下所示: render: function() { var expandedContent; if (this.state.expanded) { expandedContent = <div>some details</div>; } return ( <div> <div>Title or likewise</div> {expandedContent} </div> ); } 我知道我回答这个问题有点晚了,但为什么不只使用 1 个字符串而不是使用 2 个字符串呢? 查看这个 npm 包 https://www.npmjs.com/package/react-simple-read-more 它会解决问题。 如果您对代码感兴趣:https://github.com/oztek22/react-simple-read-more/blob/master/src/string-parser.jsx 这就是 React Js 中的完整解决方案: 调用组件: <TeamCard description="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s." limit={150}/> 成分: const TeamCard = ({ description, limit }) => { const [showAll, setShowAll] = useState(false); return ( <p className="text-center text-white text-base pt-3 font-normal pb-5"> {description.length > limit ? ( <div> {showAll ? ( <div> {description} <br /> <button onClick={() => setShowAll(false)} className="text-primary" > Read Less </button> </div> ) : ( <div> {description.substring(0, limit).concat("...")} <br /> <button onClick={() => setShowAll(true)} className="text-primary"> Read More </button> </div> )} </div> ) : ( description )} </p> ); }; export default TeamCard; 构建一个简单的组件(去掉样式)。 用途: <ReadMore text={someLongText} maxChars={500} /> 代码: import React from "react"; interface ReadMoreProps extends React.HTMLAttributes<HTMLDivElement> { text: string; maxChars: number; readMoreText?: string; readLessText?: string; } const ReadMore = ({ className, text, maxChars, readMoreText = "read more", readLessText = "read less", }: ReadMoreProps) => { const [isExpanded, setIsExpanded] = React.useState(false); const hasReadMore = text.length > maxChars; return ( <div className={className}> {text && (isExpanded || !hasReadMore) && ( <p> {text}{" "} {hasReadMore && !!isExpanded && ( <span onClick={() => setIsExpanded(false)} > {readLessText} </span> )} </p> )} {text && !isExpanded && !!hasReadMore && ( <p> {text.slice(0, maxChars)}...{" "} <span onClick={() => setIsExpanded(true)} > {readMoreText} </span> </p> )} </div> ); }; export default ReadMore;

回答 7 投票 0

如何求这段js代码的时间和空间复杂度?

这是我的平台用来查找两个节点之间关系的两个代码。 代码1: const getNodeRelationship = (节点1, 节点2) => { // 如果node1和node2是同一个节点 如果(...

回答 1 投票 0

在ReactJs中自动渲染自定义html标签

在基本的HTML中,我们几乎可以自由地使用我们想要的任何标签。我可以写这样的代码: 在基本的 HTML 中,我们几乎可以自由地使用任何我们想要的标签。我可以写这样的代码: <card> <header> <logo> <img src=".."> </logo> <header> <subject> .. </subject> <information> .. </information> <card> 我知道这不标准,但它非常有组织! 有什么创造性的方法让 JSX 支持这种语法吗?我不是在谈论手动定义标签或组件。我正在寻找一个根本解决方案,使 React JSX 自动支持所有自定义标签。” 我尝试过: const tags = ['card', 'header', 'logo', 'subject', 'information']; const components = tags.reduce((obj, tag) => { obj[tag] = ({ children, ...props }) => React.createElement(tag, props, children); return obj; }, {}); 但它不起作用,而且不是自动的 您可以创建一个函数,根据自定义标签列表动态生成 React 组件。这是一个例子: import React from 'react'; const CustomComponent = ({ tag, children, ...props }) => { const CustomTag = tag || 'div'; return React.createElement(CustomTag, props, children); }; const App = () => { const tags = ['card', 'header', 'logo', 'subject', 'information']; return ( <CustomComponent tag="card"> <CustomComponent tag="header"> <CustomComponent tag="logo"> <img src="..." alt="Logo" /> </CustomComponent> </CustomComponent> <CustomComponent tag="subject">Subject content</CustomComponent> <CustomComponent tag="information">Information content</CustomComponent> </CustomComponent> ); }; export default App;

回答 1 投票 0

#如何借助dom选择第二个li并改变它的颜色?下面的代码是否有效

一个 两个 三 const li_second=document.querySelector('li:two').style.backgroundCol...

回答 1 投票 0

将 Popover 选择限制为父组件

我正在编写自己的弹出框组件,它将进行一些文本转换 https://pastecord.com/vegygawece.js。 <--- Popover component code It should work like this: when a user selects some te...

回答 1 投票 0

检查 HTML5 表单有效性的方法?

是否可以根据我为其设置的模式检查html5表单的输入元素是否有效?我知道伪类的东西..但我希望是这样的: document.getElementById('

回答 4 投票 0

使用PHP获取DOM元素

我正在努力理解如何在 PHP 中使用 DOMElement 对象。我找到了这段代码,但我不确定它是否适用于我: $dom = new DOMDocument(); $dom->loadHTML("索引...

回答 2 投票 0

vue数据未显示在页面上

我开始使用 vue.js 编写应用程序的前半部分。我有一个问题,数据没有输出,尽管如果我通过 console.log 将其输出到控制台,一切都是

回答 1 投票 0

在添加到 DOM 之前获取元素的高度

有什么方法可以在将元素附加到 DOM 之前获取其高度吗?我知道 clientHeight 不能像我尝试的那样工作,它总是返回 0。是否有其他方法可以返回

回答 3 投票 0

使用 Puppeteer 抓取项目列表

我正在尝试从 Visma Inschool 获取我的学校时间表。由于它在学校本地托管,我有权这样做。 我正在尝试制作一个信息屏幕,但当它出现时我完全迷失了......

回答 1 投票 0

为什么 DOMDocument::saveHTML() 的行为在将 UTF-8 编码为样式和脚本元素中的实体时有所不同?

给定一个使用包含表情符号字符的样式表构建的 DOMDocument,在将 DOM 序列化回 HTML 时,我发现了一些奇怪的行为。 $html = <<< HTML 考虑到使用包含表情符号字符的样式表构建的 DOMDocument,我在将 DOM 序列化回 HTML 时发现了一些奇怪的行为。 $html = <<< HTML <!DOCTYPE html> <html> <head> <meta charset=utf-8> <style>span::before{ content: \"⚡️\"; }</style> </head> <body> <span></span> </body> </html> HTML; $dom = new DOMDocument(); $dom->loadHTML($html); echo $dom->saveHTML($dom->documentElement); echo $dom->saveHTML(); $dom->saveHTML($dom->documentElement)的结果是(根据需要): <html><head><meta charset="utf-8"> <style>span::before{ content: "⚡️"; }</style> </head><body><span></span></body></html> 但是 $dom->saveHTML() 返回(错误地): <html><head><meta charset="utf-8"> <style>span::before{ content: "&#9889;&#65039;"; }</style> </head><body><span></span></body></html> 请注意表情符号“⚡️”如何编码为样式表内的 HTML 实体 &#9889;&#65039;。它被视为文字字符串,因为应使用 CSS 转义 \26A1。 我尝试设置$dom->substituteEntities = false但没有任何效果。 相同的 HTML 实体转换也发生在 <script> 元素内部,这会在浏览器中导致类似的问题。 通过在线 PHP shell 进行测试:https://3v4l.org/jMfDd 您应该在 DOMDocument 上加载带有表情符号的 HTML 之前转换编码: $dom->loadHTML(mb_convert_encoding($htmlCode, 'HTML-ENTITIES', 'UTF-8')); 编辑:正如帖子所有者提到的,mb_convert_enconding 在未来的 PHP 版本中已被弃用(目前在 8.2.5 上进行了测试并且工作正常)。对于更高版本的 PHP,请查看 https://php.watch/versions/8.2/mbstring-qprint-base64-uuencode-html-entities-deprecated#html

回答 1 投票 0

选择器“a:not(:has(a))”适用于 Chrome,但不适用于 Firefox [重复]

以下代码适用于 Chrome 和 Edge,但不适用于 Firefox: document.querySelectorAll('a:not(:has(a))') 在 Firefox 上,它会抛出 未捕获的 DOMException: Document.querySelectorAll: 'a:not(:has(a)...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.