我有一个字符串(此字符串来自数据库,即动态字符串),其中包含两个<a>
标记。 E.g:
$str = '<a href="http://www.google.com" key1="value1">Any string</a>
<a key1="value1" href="http://www.google.com">Any string</a>';
如何为该字符串中的onclick
标记添加单独的<a>
属性,即第一个<a>
代码onclick="test1()"
,下一个<a>
代码{ {1}}等,使用PHP onclick="test2()"
或其他方法。
答案 0 :(得分:2)
$str = str_replace(' href="',' onclick="test(this)" href="',$str);
这比preg_replace
快得多,因为它不必匹配模式。
当然,这取决于您使用它的方式。
答案 1 :(得分:1)
注意:此解决方案仅适用于您当前的字符串模式(似乎是链接集合)
注意2 :您也可以使用unobtrusive javascript进行此操作
最后回答你的问题
$str = str_ireplace ('<a ', '<a onclick="doSomething(this)"', $str);
http://php.net/manual/en/function.str-ireplace.php
修改强>
@Eldros指出,每个链接的方法都需要不同。
因为我肯定建议你在客户端照顾它。但是,如果您必须使用PHP执行此操作,则可以使用类似Simple HTML DOM的库进行DOM解析。 请注意,不使用DOM操作,而是使用字符串解析。这可能对您有用,也可能无关紧要。
这是显示如何修改字符串的文档中的示例。有关完整用法的信息,请参阅文档:http://simplehtmldom.sourceforge.net/manual.htm
// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>
在您的情况下,您只需使用str_get_html
加载字符串并循环修改您的链接。
答案 2 :(得分:1)
我没有使用此库,但在PHP Simple HTML DOM Parser的帮助下,您可以使用此代码尝试添加函数:
//array containing your functions names
$functions = array(test1, test2);
//Parse the string to get the HTML DOM
$html = str_get_html($str);
//Retrieve the array of anchors
$links = $html->find('a');
//Loop through the anchors and add the onclick events
for($i=0;$i<count($links);$i++){
$links[$i]->onclick = $functions[$i];
}
//return the html to the string
$html->save();
您可能需要对其进行一些测试并进行更改,以便将其传递到您的过程中。
编辑:要调整此解决方案以便使用不引人注目的JavaScript,您可以将$links[$i]->onclick
替换为$links[$i]->id
,然后使用javascript添加eventHandler:
//Add an event listener that will trigger when the content of the page is loaded
document.addEventListener("DOMContentLoaded", function() {
var i;
//retrieve all the anchors
var link = document.getElementsByTagName("a");
//Loop through the anchors
for(i=0; i<links.length; i++){
//If the anchor has an id
if(links[i].id){
//retrieve the function
var myFuncName = links[i].id;
var myFunction = window[myFuncName];
//add the event listener
links[i].addEventListener("change", myFunction, false);
}
}
}, false);
检索函数非常重要,因为links[i].id
是一个字符串,而addEeventListener不会使用字符串而不是函数。由于window.function
与window['function']
相同,因此可完美转换。
与PHP代码一样,这可能是根据您的环境而改变的对象。例如,如果需要onchange
eventHandler的所有锚定位于ID为“mylinks”的div
标记下,则可以document.getElementsByTagName("a");
更改document.getElementById("mylinks).getElementsByTagName("a");
。