些元素默认带有padding, 比如ul标签。
*{margin:0;padding:0;}
让所有的标签内外边距是都 0 ;
*的执行效率不高, 所以我们使用并集选择器, 罗列出所有的标签(不用背, 有专业的清除默认样式的样式表, 以利于今后学习)
当然, 以上的写法是我们练习的写法。
真正的工作我们如下写法:
html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img { margin:0; padding:0; }
最常用
常扒别人网站文章的坑们;我是指那种批量式采集的压根不看内容的;少不了都会用到删除html标签的函数;这里介绍3种不同用途上的方法;
$str='<div><p>这里是p标签</p><img src="" alt="这里是img标签"><a href="">这里是a标签</a><br></div>';
1:删除全部或者保留指定html标签php自带的函数strip_tags即可满足要求,使用方法:strip_tags(string,allow);string:需要处理的字符串;allow:需要保留的指定标签,可以写多个;
echo strip_tags($str,'<p><a>');//输出:<p>这里是p标签</p><a href="">这里是a标签</a>
此函数的优点是简单粗暴;但是缺点也很明显;如果有一大堆标签;而我只是想删除指定的某一个;那要写很多需要保留的标签;所以有了第二个方法;
2:删除指定的html标签使用方法:strip_html_tags($tags,$str);$tags:需要删除的标签(数组格式)$str:需要处理的字符串;
function strip_html_tags($tags,$str){
$html=array();
foreach ($tags as $tag) {
$html[]="/(<(?:\/".$tag."|".$tag.")[^>]*>)/i";
}
$data=preg_replace($html, '', $str);
return $data;
}
echo strip_html_tags(array('p','img'),$str);
//输出:<div>这里是p标签<a href="">这里是a标签</a><br></div>;
3:删除标签和标签的内容使用方法:strip_html_tags($tags,$str);$tags:需要删除的标签(数组格式)$str:需要处理的字符串;
function strip_html_tags($tags,$str){
$html=array();
foreach ($tags as $tag) {
$html[]='/<'.$tag.'.*?>[\s|\S]*?<\/'.$tag.'>/';
$html[]='/<'.$tag.'.*?>/';
}
$data=preg_replace($html,'',$str);
return $data;
}
echo strip_html_tags(array('a','img'),$str);
//输出<div><p>这里是p标签</p><br></div>
很多网站文章里面会带上网站名和链接;这个函数就是专治这种;别拿这个函数采集本站啊;不然保证不打死你;4:终极函数,删除指定标签;删除或者保留标签内的内容;使用方法:strip_html_tags($tags,$str,$content);$tags:需要删除的标签(数组格式)$str:需要处理的字符串;$ontent:是否删除标签内的内容 0保留内容 1不保留内容
本指南中,我们将介绍:
.reduce() 函数是什么?
创建我们的 .reduce() 函数版本
计算电子商务购物车的商品总数和价格
为餐厅菜单创建一组独特的类别
从数组中删除重复的对象
用 .reduce() 替换 .filter().map()
按键分组对象(类似于 SQL GROUP BY 或 C# 的 .GroupBy())
乍一看似乎很混乱
如果您曾经为理解 .reduce() 函数而苦苦挣扎,那么您并不孤单。 要真正了解它的工作原理并自信地使用它,需要多花几次功夫。
大多数例子都使用一个简单的数字或字符串数组,但现实是我们通常使用很少涉及的复杂对象。
但在我们跳进去之前。
以下是如何从这些内容中获得更多信息。
打开您的代码编辑器并亲自尝试示例
修改它(更改值,向数组添加或从数组中删除元素等)
如果您发现自己迷失在其中一个示例中,请使用笔和纸或在您的代码编辑器上追踪变量的值。
让我们开始吧!
.reduce() 函数是什么?
它是一种对数组的每个元素执行回调函数的方法。
计算的返回值传递给下一个元素。
在第一次迭代中,没有“上一次计算的返回值”,如果传入,可以用一个初始值代替。
否则,数组的第一个元素被用作初始值,迭代从下一个元素开始。
简单的说,就是一个变量和一个循环。
变量保存新值
循环遍历数组,因此我们可以从每个元素中获取我们想要的内容
这个:
实现与此相同:
几乎每次需要使用变量和循环时,都可以用 reduce 函数替换它。
由于没有比实际尝试更好的学习方法,让我们构建我们的 .reduce() 方法版本,以便我们真正理解它。
构建我们自己的 .reduce()
让我们通过解决一个简单的问题来做到这一点:
我们有一个数字数组,我们想要所有数字的总和。
就像上面的变量和循环的例子一样。
我们需要三样东西:
数组
保存总值 total 的变量(通常称为累加器)
遍历数组的循环
假设你想把它变成一个函数,这样你就可以很容易地使用它,你会怎么做?
也许沿着这些路线:
我们将数组作为参数传递给我们的函数
我们最后返回总数。
这看起来不错,但是如果我们想要设置变量总计初始值的选项怎么办?
我们可以将选项添加为另一个参数并将总计设置为它的值。
像这样:
但是这个函数还有2个问题。
我们无法在循环内添加要执行的不同逻辑(它只会将当前元素添加到 sum 变量)
它仅适用于简单数组(其中每个项目都是值类型,而不是对象)
我会告诉你我的意思。
这次让我们创建一个对象数组
让我们调用传入对象数组的 myReducer 函数
它不起作用,因为我们要添加的值在对象内部而不是对象本身。
我们必须以 total += arr[i].number 的形式访问它
但是这个函数没有考虑到这一点。
但是,如果我们添加一个回调函数作为第二个参数,我们可以:
对数组的每个元素执行回调函数
创建我们需要的任何自定义逻辑
让我们修改我们的 myReducer 函数。
让我们用对象数组再次测试它。
首先,声明回调函数并调用传入它的 myReduce。
请注意,我们根据 total 的值添加了 if 和 else 条件,这是我们的 initialValue 选项。
如果未给出初始值
它不会在第一次迭代时执行回调
没有什么要补充的,initialValue 是未定义的。
只需将 total 设置为当前元素的值
如果给出初始值
它在所有迭代中执行回调
这几乎就是原始 Array.prototype.reduce() 所做的。
主要区别在于不需要将数组作为参数传递,因为原始 .reduce() 绑定到 Array.prototype,因此数组始终是调用 .reduce() 的数组。
计算电子商务购物车的总项目数和价格
假设你有一个像这样的数组:
您需要将此数组缩减为这样的对象 { totalItems: 0, totalPrice: 0 } 以便我们可以在结帐页面上显示正确的信息。
这是我们可以做到的:
为餐厅菜单创建一组独特的类别
给定这个数组:
我们需要将其缩减为一系列独特的类别,例如 ['Appetizer','Entree','Main']
这是我们可以做到的:
从数组中删除重复的对象
与上面的示例类似,但这次我们需要返回仅使用唯一对象过滤的相同对象数组。
这是具有重复对象的数组:
注意:你必须有一个类似于 id 的属性,它对每个对象都是唯一的
这就是我们如何创建另一个仅包含唯一元素的数组:
将 .filter().map() 替换为 .reduce()
过滤数组然后修改过滤后数组的元素是很常见的。
我们将使用上面菜单类别的相同数组
但是这次我们想得到一个数组,其中只有类别为“Entree”的项目的 itemName
我们可以使用 .filter() 数组,然后使用 .map() 来完成它
或者我们可以用 .reduce() 来做
使用 .reduce() 的优点是您只迭代数组一次。
按键分组对象(类似于 SQL GROUP BY 或 C# 的 .GroupBy())
这是我最喜欢的。 这是一个非常方便的函数,可能会在下一次更新时包含在 JavaScript 的数组方法中(目前处于第 3 阶段以供批准)
这个 groupBy 函数也可以用作解决更复杂问题的中间步骤。
我们将再次使用菜单类别数组:
这是我们的 groupBy 函数:
如果我们添加将密钥作为函数传递的选项,它会变得更加方便。
只需替换这一行:
有了这个:
这样我们就可以调用它并传递一个返回键的函数,而不是自己编写字符串,避免拼写错误。
结论
在这篇文章中,我们了解到:
什么是 .reduce() 函数
如何创建我们的 .reduce() 函数版本
计算电子商务购物车的总项目数和价格
为餐厅菜单创建一组独特的类别
从数组中删除重复的对象
将 .filter().map() 替换为 .reduce()
如何按键对对象进行分组(类似于 SQL GROUP BY 或 C# 的 .GroupBy())
谢谢阅读!
*请认真填写需求信息,我们会在24小时内与您取得联系。