Использование jQuery:
parent.html
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<style>
iframe {
width: 100%;
border: 1px solid black;
}
</style>
<script>
function foo(w, h) {
$("iframe").css({width: w, height: h});
return true; // for debug purposes
}
</script>
<iframe src="child.html"></iframe>
</body>
child.html
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function() {
var w = $("#container").css("width");
var h = $("#container").css("height");
var req = parent.foo(w, h);
console.log(req); // for debug purposes
});
</script>
<style>
body, html {
margin: 0;
}
#container {
width: 500px;
height: 500px;
background-color: red;
}
</style>
<div id="container"></div>
</body>
Ознакомьтесь с общим шаблоном обновления
var paths = svg.selectAll('path')
.data(pathsData)
var pathsEnter = paths.enter()
.append('path')
.attr("class", "line")
.attr('d', line)
На основе фотографии, которой вы поделились в комментариях
[1121 ] вычисляют уникальный массив всех значений service
. (в вашем примере это будет [4, 8]
, но оно будет управляться данными.)
Затем используйте этот массив в качестве данных для группы service lines
.
Расположите каждую строку в соответствии с вашим yScale.
Бонус: создайте цветовую шкалу для динамического определения цвета обводки линии на основе ее значения в массиве значений обслуживания.
const data = [{service: 4, otherData: '...'},{service: 4, otherData: '...'},{service: 8, otherData: '...'},{service: 8, otherData: '...'},{service: 12, otherData: '...'},{service: 12, otherData: '...'}
]
// Get a unique array from data
const serviceData = Array.from(new Set(data.map(a => a.service)));
// create a color scale if you need
const color = d3.scaleLinear().domain(serviceData).interpolate(d3.interpolateHcl).range([d3.rgb("#ff0000"), d3.rgb('#257c00')]);
const width = 500;
const height = 300;
const svg = d3.select('body').append('svg').attr('width', width).attr('height', height)
// Bind to data
const lines = svg.append('g').attr("class", "service-lines-group").selectAll('line')
.data(serviceData)
// Enter selection - create lines for each data point
const linesEnter = lines.enter()
.append('line')
.attr("class", "service-line")
.attr('x1', 0)
.attr('x2', width)
.attr('y1', d => d * 10)
.attr('y2', d => d * 10)
.attr('stroke', (d, i) => {
return color(d)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>