Разрыв линии в C3 сгенерированной SVG-диаграмме через JavaScript
мне нужна помощь по генерации разрыва строки в html.
в JavaScript
var x = "jun";
var y = "2015";
var calculate= x + "<br>" + y;
Html возвращает, как показано ниже
<div>jan <br> 2015</div>
ожидаемый результат: мне нужен разрыв строки в HTML, но не должна делать <br>
тег.
обновление: Я хочу "января" в первой строке и следующей строке "2015"
Я использую эти значения в диаграмме c3 x ценности.
спасибо заранее.
4 ответов
ваш вопрос заявление было немного неточным: вы используете C3.js, который будет производить элемент svg.
таким образом, возвращенная разметка была фактически <tspan dx="0" dy=".71em" x="0">0<br>2014</tspan>
.
C3 будет использовать textContent
свойство tspan для добавления текстового содержимого, возвращаемого вашей функцией.
Как уже сказано в другие вопросы, вы не можете добавить разрыв строки в <tspan>
элементы.
таким образом, решение эффективно для создания нового tspan как раз под другой, в той же самой <text>
элемент.
к сожалению, нет никакого способа получить эти точные элементы, кроме как зацикливаясь через все другие tspans, так что это может звучать как настоящий хак, но вот сценарий, который будет делать то, что вы хотите...
// get our svg doc
var svg = document.querySelector('svg');
// get our tspans element
var tspans = svg.querySelectorAll('tspan');
// transform it to an array so the clones don't add to the list
var ts = Array.prototype.slice.call(tspans);
for(var i = 0; i<ts.length; i++){
// get the content
var cont = ts[i].textContent.split('\n');
// that wasn't the good one...
if(cont.length<2) continue;
// create a clone
var clone = ts[i].cloneNode(1);
// set the text to the new line
clone.textContent = cont[1];
// space it a litlle bit more
clone.setAttribute('dy', '0.9em')
// set the good text to the upperline
ts[i].textContent = cont[0];
// append our clone
ts[i].parentNode.insertBefore(clone, ts[i].nextSibling)
};
var chart = c3.generate({
data: {
json: [{
date: '2014-01-01',
upload: 200,
download: 200,
total: 400
}, {
date: '2014-01-02',
upload: 100,
download: 300,
total: 400
}, {
date: '2014-02-01',
upload: 300,
download: 200,
total: 500
}, {
date: '2014-02-02',
upload: 400,
download: 100,
total: 500
}],
keys: {
x: 'date',
value: ['upload', 'download']
}
},
axis: {
x: {
type: 'timeseries',
tick: {
format: function (x) {
if (x.getDate() === 1) {
return x.getMonth() + '\n' + x.getFullYear();
}
}
}
}
}
});
// get our svg doc
var svg = document.querySelector('svg');
// get our tspans element
var tspans = svg.querySelectorAll('tspan');
// transform it to an array so the clones don't add to the list
var ts = Array.prototype.slice.call(tspans);
for(var i = 0; i<ts.length; i++){
// get the content
var cont = ts[i].textContent.split('\n');
// that wasn't the good one...
if(cont.length<2) continue;
// create a clone
var clone = ts[i].cloneNode(1);
// set the text to the new line
clone.textContent = cont[1];
// space it a litlle bit more
clone.setAttribute('dy', '0.9em')
// set the good text to the upperline
ts[i].textContent = cont[0];
// append our clone
ts[i].parentNode.insertBefore(clone, ts[i].nextSibling)
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://rawgit.com/masayuki0812/c3/master/c3.js"></script>
<link href="https://rawgit.com/masayuki0812/c3/master/c3.css" rel="stylesheet">
<div id="chart"></div>
вам нужно создать новый <tspan>
для каждой новой строки. Причина в том, что <tspan>
обычно находится внутри <text>
элемент. Который имеет определенные координаты.
Вы не можете идти "против" этих координат.
единственное, что вы можете сделать, это создать еще один <tspan>
с различным набором координат и положение его, как вам нравится.
поскольку текстовые элементы SVG отображаются с использованием тех же методов рендеринга, что и остальные графические элементы SVG, те же координировать системные преобразования. ,.. и т. д. Также применяются.
текстовый элемент SVG отображает первый символ в начале текущая позиция текста.
эта позиция определяется атрибутами " x " и " y " текста SVG Элемент.
внутри
<text>
свойства элемента, текста и шрифта и текущий текст положение можно отрегулировать с абсолютными или относительными значениями координаты включив<tspan>
элемент.
возможно, это то, что вам нужно:
var calculate= '<pre>' + x + '\n' + y + '</pre>';
вы должны поместить все это в предварительные теги, которые \n интерпретируется как разрыв строки.
о программе:http://www.sitepoint.com/everything-need-know-html-pre-element/
демо на CodePen:http://codepen.io/mizech/pen/gPOrEz
Я пробовал следующий код в ABC.html и он работает.пожалуйста, попробуйте.
<!DOCTYPE html>
<html>
<body>
<div id="demo"></div>
<script>
var x = "jun";
var y = "2015";
document.getElementById("demo").innerHTML =x+"<br>"+y;
</script>
</body>
</html>