如何用Python为多个Folium Marker添加点击事件函数
解决方案
因为Folium生成的Marker代码是嵌入在<script>标签内的JavaScript字符串,Beautiful Soup更适合处理HTML DOM结构,对这类JS代码片段的批量修改,用正则表达式会更直接高效。
具体实现步骤
- 读取原HTML文件的全部内容
- 定义正则匹配规则,定位每个Marker的
.addTo(map_xxxx)结尾部分 - 将匹配到的内容替换为追加了点击事件的代码
- 把修改后的内容写入新的HTML文件
代码示例
import re # 定义要追加的点击事件代码 click_event = '''.on('click', function(e) { var point = e.latlng; document.querySelector('meta[name="point"]').setAttribute("content", point); })''' # 读取原HTML文件 with open('original_map.html', 'r', encoding='utf-8') as f: html_content = f.read() # 正则匹配Marker的addTo语句,适配Folium自动生成的随机地图ID pattern = re.compile(r'(\.addTo\(map_[a-f0-9]+\);)') # 执行替换,保证JS语法正确 modified_content = pattern.sub(lambda m: m.group(0).rstrip(';') + click_event + ';', html_content) # 写入修改后的HTML文件 with open('modified_map.html', 'w', encoding='utf-8') as f: f.write(modified_content)
说明
- 正则表达式
(\.addTo\(map_[a-f0-9]+\);)精准匹配Folium生成的Marker专属.addTo(map_xxxx);结构,覆盖所有自动生成的随机地图ID - 替换时先移除原语句末尾的分号,追加点击事件后再补回分号,避免出现JS语法错误
- 该方法会扫描整个HTML文件内容,自动匹配所有符合规则的Marker代码,无需单独定位script标签
内容的提问来源于stack exchange,提问作者wbleakley
相关产品推荐
相关产品推荐

